View Full Version : Indirizzo fisico di un file
Dexterwolf
12-01-2005, 08:43
Salve, il mio problema è trovare, dato il nome di un file, il suo indirizzo fisico, cioè la sua posizione fisica sull'hd, ad esempio il primo cluster occupato ecc.
Mi serve per tracciare se un file viene spostato; infatti pur potendo spostare un file da una cartella ad un'altra e poi ripristinarlo nella posizione precedente, è improbabile che possa essere rilocato esattamente nella stessa posizione fisica, occupando ad es gli stessi cluster di prima.
Sto lavorando in c++, e sono un programmatore inesperto, sapete aiutarmi? Io ho girato in rete in lungo e in largo possibile che non abbia trovato neanche un sorgente o un esempio?
Grazie!!!
Ziosilvio
12-01-2005, 09:19
Originariamente inviato da Dexterwolf
trovare, dato il nome di un file, il suo indirizzo fisico, cioè la sua posizione fisica sull'hd, ad esempio il primo cluster occupato ecc.
Credo proprio che dipenda dal filesystem. Su che macchina lavori?
Mi serve per tracciare se un file viene spostato; infatti pur potendo spostare un file da una cartella ad un'altra e poi ripristinarlo nella posizione precedente, è improbabile che possa essere rilocato esattamente nella stessa posizione fisica, occupando ad es gli stessi cluster di prima.
D'accordo, però mi sembra di ricordare che le cartelle sono semplicemente dei file con una struttura speciale; e che se sposti un file all'interno di una stessa partizione, ti limiti a cancellare un riferimento al file in una cartella e a scriverne uno in un'altra, senza cambiare la posizione fisica del file.
Importante: chiedo conferma o smentita a tutti i forumisti riguardo a tutto quello che ho scritto sopra.
Dexterwolf
12-01-2005, 11:45
sto facendo una tesi e devo lavorare sia su macchine con ntfs che con fat32; penso sia giusta la considerazione che spostando un file cambio solo il riferimento ma non la posizione fisica, comunque sia non c'è modo di conoscerla?
E' un problema...Windows ti nasconde l'hardware...accedere con i metodi standard che potrebbero essere usati sotto DOS non possono essere usati se non costruendo un device driver...
Dexterwolf
12-01-2005, 17:02
io ho trovato la funzione DeviceIoControl sulle msdn, e nello specifico
col codice FSCTL_GET_RETRIEVAL_POINTERS dovrebbe in qualche dare in output quel che cerco (forse); problema è che non riesco ad usarla, mi da sempre strani errori.
Qualcuno per caso la conosce?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/fsctl_get_retrieval_pointers.asp
In effetti dovrebbe fare proprio quello che cerchi...
Dai un'occhiata qui: http://www.sysinternals.com/ntw2k/info/defrag.shtml
E qui: http://www.wd-3.com/archive/luserland.htm
Dexterwolf
13-01-2005, 09:44
Dal secondo link ho ho trovato un esempietto che dovrebbe fare quello che cerco, purtroppo ho problemi a farlo funzionare. Mi mancano delle librerie (sdk e ddk), come ntddvol.h e altre. Devo includere qualche pat nel visual studio .net o cosa?
Probabilmente devi scaricare l'ultimo device driver development kit dal sito M$
Dexterwolf
13-01-2005, 14:24
Pare che non sia free...
Ho visto ora....strano...fino a poco tempo fa era liberamente scaricabile...
Lo davano anche sulle riviste....
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.