Ciao,
grazie per avermi risposto, ho notato che ho omesso una parte nella spiegazione e vedo se riesco a spiegarmi meglio.
Con offset iniziale intendo la posizione sul disco fisso del punto, espresso in byte, da cui inizia il file, e offset finale il punto espresso in byte del punto in cui finisce. La differenza tra l'offeset finale e quello iniziale mi restituisce la dimensione in byte del file interessato.
in questo modo tramite la funzione readfile:
Public Declare Auto Function ReadFile Lib "Kernel32.dll" ( _
ByVal hndRef As Integer, ByVal lpBuffer As Byte(), _
ByVal numberOfBytesToRead As Integer, ByRef numberOfBytesRead As Integer, ByRef Overlapped As System.Threading.NativeOverlapped) As Boolean
passando tra i parametri richiesti l'offest iniziale e finale del file, riempio un buffer con i dati che compongono il file, per poi scriverne uno identico tramite le funzioni createfile e writefile:
Public Declare Auto Function CreateFile Lib "kernel32.dll" (ByVal lpFileName As String, _
ByVal dwDesiredAccess As Int32, ByVal dwShareMode As Int32, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _
ByVal dwCreationDisposition As Int32, ByVal dwFlagsAndAttributes As Int32, ByVal hTemplateFile As IntPtr) As Integer
Public Declare Auto Function WriteFile Lib "kernel32.dll" ( _
ByVal hndRef As Integer, ByVal lpBuffer As Byte(), _
ByVal numberOfBytesToWrite As Integer, ByRef numberOfBytesWritten As Integer, ByRef Overlapped As Long) As Boolean 'System.Threading.NativeOverlapped) As Boolean
Con l'API CreateFile trovo il "PhysicalDiskHandle" del file appena letto, che assegno al primo parametro dell'API WriteFile, il secondo parametro è il buffer che ho dimensionato, il terzo riguarda la dimensione totale del buffer da scrivere, il quarto parametro restituisce i byte scritti.
In pratica con questa operazione riesco a creare una copia di un file, ma a me servirebbe sapere se c'è una qualche api che mi consente di trovare gli offest iniziali e finali di un file, passando all'Api le informazioni che lo riguardano. In tal modo potrei usare le Api sopra scritte per creare una copia del file interessato.
Il motivo di tutto questo lavoro intricato sta nel fatto che la copia del file che mi interesserebbe fare, non la creerei utilizzando il nome (con la classica funzione File.copy), ma solo le informazioni riguardanti i suoi offsets.
Spiegare non è mai facile, soprattutto se si vuole tentare di fare qualcosa non sapendo esattamente come procedere per questo ho preferito chiedere a chi è più informato di me in merito a questa cosa.
Un grazie in anticipo
ciao
|