Hola a todos !! , ¿cómo están?
Miren tengo una pregunta a ver si me pueden ayudar o dar información.
Quiero sacar la lista de ficheros y directorios que hay en la fat y pasarla a un memo, a ver si se les ocurre alguna manera de poder hacerlo.
Muchas gracias !!
Leer lista de ficheros y directorios de la FAT
Comenzado por
ruluki
, oct 16 2009 05:10
2 respuestas en este tema
#1
Escrito 16 octubre 2009 - 05:10
#2
Escrito 16 octubre 2009 - 08:47
Mira, nunca he tenido la necesidad de hacer algo como lo que quieres hacer, pero alguna vez ví este programa que revisa los cluster del Disco, igual y algo parecido podría hacer para obtener lo que necesitas.
Espero te sirva, saludos.
delphi
program Cluster; {$APPTYPE CONSOLE} uses Windows, SysUtils; const FSCTL_GET_RETRIEVAL_POINTERS = $90073; type Extent = record Vcn: int64; Lcn: int64; end; RETRIEVAL_POINTERS_BUFFER = record ExtentCount: Cardinal; StartingVcn: int64; Extents: array[0..0] of Extent; end; PRETRIEVAL_POINTERS_BUFFER = ^RETRIEVAL_POINTERS_BUFFER ; procedure OutString(Str: string); begin Writeln(Str); end; procedure DumpFile(Filename: string); var hFile: THandle; Buffer: array[1..512+2] of int64; StartVcn: Int64; ClusterList: PRETRIEVAL_POINTERS_BUFFER; Returned: Cardinal; Success: BOOL; LastError: Cardinal; i: integer; begin hFile:= CreateFile(PChar(Filename),GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE ,nil, OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,0); if hFile <> INVALID_HANDLE_VALUE then begin StartVcn:= 0; ClusterList:= @Buffer; repeat Success:= DeviceIOControl(hFile, FSCTL_GET_RETRIEVAL_POINTERS, @StartVcn, Sizeof(StartVcn),@Buffer, Sizeof(Buffer), Returned, nil); if Success then LastError:= 0 else LastError:= GetLastError; if Success or (LastError = ERROR_MORE_DATA) then begin StartVcn:= ClusterList^.StartingVcn; for i:= 0 to ClusterList^.ExtentCount - 1 do begin OutString(Format('VCN: %d LCN: %d LEN: %d',[StartVcn, ClusterList^.Extents[i].Lcn, ClusterList^.Extents[i].Vcn - StartVcn])); StartVcn := ClusterList^.Extents[i].Vcn; end; end else OutString(SysErrorMessage(LastError)); until LastError <> ERROR_MORE_DATA; CloseHandle(hFile); end else OutString(SysErrorMessage(GetLastError)); end; begin DumpFile(ParamStr(0)); readln; end.
Espero te sirva, saludos.
#3
Escrito 16 octubre 2009 - 11:50
...Quiero sacar la lista de ficheros y directorios que hay en la fat y pasarla a un memo...
FAT12, 16 o 32? y por curiosidad; cual es el objetivo?