Imports System.IO Imports Microsoft.VisualBasic.Net.Protocols Imports Microsoft.VisualBasic.Net.Protocols.Reflection Imports Microsoft.VisualBasic.Serialization Namespace FileSystem.Protocols Public Class RenameArgs Public Property old As String Public Property [New] As String End Class Public Class DeleteArgs Public Property obj As String Public Property [option] As Integer End Class ''' ''' Initializes a new instance of the System.IO.FileStream class with the specified ''' path and creation mode. ''' Public Class FileOpen : Inherits FileHandle ''' ''' Specifies how the operating system should open a file. ''' ''' Public Property Mode As Integer Public Property Access As Integer = FileAccess.Read Public Overrides Function ToString() As String Return $"[{DirectCast(Mode, FileMode).ToString }] " & FileName.ToFileURL End Function ''' ''' Initializes a new instance of the System.IO.FileStream class with the specified ''' path and creation mode. ''' Public Function OpenHandle() As FileStream Dim mode As FileMode = DirectCast(Me.Mode, FileMode) Dim access As FileAccess = DirectCast(Me.Access, FileAccess) Return New FileStream(FileName, mode, access) End Function End Class Public Class ReadBuffer : Inherits FileHandle Implements IReadWriteBuffer Public Property offset As Integer Implements IReadWriteBuffer.offset ''' ''' 输入的参数的长度 ''' ''' Public Property length As Integer Implements IReadWriteBuffer.length Sub New() End Sub Sub New(handle As FileHandle) Call MyBase.New(handle) End Sub Public Function CreateBuffer() As Byte() Return CreateBuffer(Me) End Function Public Shared Function CreateBuffer(op As IReadWriteBuffer) As Byte() Dim buffer As Byte() = New Byte(op.length + op.offset - 1) {} Return buffer End Function End Class Public Interface IReadWriteBuffer Property offset As Integer Property length As Integer End Interface Public Class WriteStream : Inherits RawStream Implements IReadWriteBuffer Public Property Handle As FileHandle Public Property length As Integer Implements IReadWriteBuffer.length Public Property offset As Integer Implements IReadWriteBuffer.offset Public Property buffer As Byte() Sub New() End Sub Sub New(raw As Byte()) Dim buf As Byte() = New Byte(INT32 - 1) {} Dim p As Integer = Scan0 Dim handleLen As Integer Dim bufferLen As Integer Call Array.ConstrainedCopy(raw, p.Move(INT32), buf, Scan0, INT32) : length = BitConverter.ToInt32(buf, Scan0) Call Array.ConstrainedCopy(raw, p.Move(INT32), buf, Scan0, INT32) : offset = BitConverter.ToInt32(buf, Scan0) Call Array.ConstrainedCopy(raw, p.Move(INT32), buf, Scan0, INT32) : handleLen = BitConverter.ToInt32(buf, Scan0) Call Array.ConstrainedCopy(raw, p.Move(INT32), buf, Scan0, INT32) : bufferLen = BitConverter.ToInt32(buf, Scan0) buf = New Byte(handleLen - 1) {} Call Array.ConstrainedCopy(raw, p.Move(handleLen), buf, Scan0, handleLen) Dim json As String = System.Text.Encoding.UTF8.GetString(buf) Handle = json.LoadObject(Of FileHandle) buffer = New Byte(bufferLen - 1) {} Call Array.ConstrainedCopy(raw, p, buffer, Scan0, bufferLen) End Sub Public Overrides Function Serialize() As Byte() Dim handle As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.Handle.GetJson) Dim length As Byte() = BitConverter.GetBytes(Me.length) Dim offset As Byte() = BitConverter.GetBytes(Me.offset) Dim chunkBuffer As Byte() = New Byte(INT32 + ' length INT32 + ' offset INT32 + ' handle length INT32 + ' buffer length handle.Length + buffer.Length - 1) {} Dim p As Integer = Scan0 Dim handleLen As Byte() = BitConverter.GetBytes(handle.Length) Dim bufferLen As Byte() = BitConverter.GetBytes(buffer.Length) Call Array.ConstrainedCopy(length, Scan0, chunkBuffer, p.Move(INT32), INT32) Call Array.ConstrainedCopy(offset, Scan0, chunkBuffer, p.Move(INT32), INT32) Call Array.ConstrainedCopy(handleLen, Scan0, chunkBuffer, p.Move(INT32), INT32) Call Array.ConstrainedCopy(bufferLen, Scan0, chunkBuffer, p.Move(INT32), INT32) Call Array.ConstrainedCopy(handle, Scan0, chunkBuffer, p.Move(handle.Length), handle.Length) Call Array.ConstrainedCopy(buffer, Scan0, chunkBuffer, p, buffer.Length) Return chunkBuffer End Function Public Function CreateBuffer() As Byte() Return ReadBuffer.CreateBuffer(Me) End Function End Class Public Class FileStreamPosition : Inherits FileHandle Public Const [GET] As Long = -100 ''' ''' -100表示获取 ''' ''' Public Property Position As Long = [GET] Sub New(handle As FileHandle) Call MyBase.New(handle) End Sub Sub New() End Sub End Class End Namespace