Ir al contenido


Foto

Leer lista de ficheros y directorios de la FAT


  • Por favor identifícate para responder
2 respuestas en este tema

#1 ruluki

ruluki

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 16 octubre 2009 - 05:10

Hola a todos !! , ¿cómo están?  :D

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 !!  :smiley:
  • 0

#2 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

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.


delphi
  1. program Cluster;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows, SysUtils;
  7.  
  8. const
  9.   FSCTL_GET_RETRIEVAL_POINTERS = $90073;
  10.  
  11. type
  12.   Extent = record
  13.     Vcn: int64;
  14.     Lcn: int64;
  15.   end;
  16.  
  17.   RETRIEVAL_POINTERS_BUFFER = record
  18.     ExtentCount: Cardinal;
  19.     StartingVcn: int64;
  20.     Extents: array[0..0] of Extent;
  21.   end;
  22.  
  23.   PRETRIEVAL_POINTERS_BUFFER = ^RETRIEVAL_POINTERS_BUFFER ;
  24.  
  25. procedure OutString(Str: string);
  26. begin
  27.   Writeln(Str);
  28. end;
  29.  
  30. procedure DumpFile(Filename: string);
  31. var
  32.   hFile: THandle;
  33.   Buffer: array[1..512+2] of int64;
  34.   StartVcn: Int64;
  35.   ClusterList: PRETRIEVAL_POINTERS_BUFFER;
  36.   Returned: Cardinal;
  37.   Success: BOOL;
  38.   LastError: Cardinal;
  39.   i: integer;
  40. begin
  41.   hFile:= CreateFile(PChar(Filename),GENERIC_READ, FILE_SHARE_READ or
  42.   FILE_SHARE_WRITE ,nil, OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,0);
  43.   if hFile <> INVALID_HANDLE_VALUE then
  44.   begin
  45.     StartVcn:= 0;
  46.   ClusterList:= @Buffer;
  47.   repeat
  48.     Success:= DeviceIOControl(hFile, FSCTL_GET_RETRIEVAL_POINTERS, @StartVcn,
  49.     Sizeof(StartVcn),@Buffer, Sizeof(Buffer), Returned, nil);
  50.     if Success then
  51.       LastError:= 0
  52.     else
  53.       LastError:= GetLastError;
  54.     if Success or (LastError = ERROR_MORE_DATA) then
  55.     begin
  56.       StartVcn:= ClusterList^.StartingVcn;
  57.       for i:= 0 to ClusterList^.ExtentCount - 1 do
  58.       begin
  59.         OutString(Format('VCN: %d LCN: %d LEN: %d',[StartVcn, ClusterList^.Extents[i].Lcn,
  60.         ClusterList^.Extents[i].Vcn - StartVcn]));
  61.         StartVcn := ClusterList^.Extents[i].Vcn;
  62.       end;
  63.     end else OutString(SysErrorMessage(LastError));
  64.   until LastError <> ERROR_MORE_DATA;
  65.   CloseHandle(hFile);
  66.   end else OutString(SysErrorMessage(GetLastError));
  67. end;
  68.  
  69. begin
  70.   DumpFile(ParamStr(0));
  71.   readln;
  72. end.



Espero te sirva, saludos.
  • 0

#3 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

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?
  • 0




IP.Board spam blocked by CleanTalk.