Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Encontrar propiedades de un archivo desde Delphi. (https://www.clubdelphi.com/foros/showthread.php?t=44239)

gonzalez 31-05-2007 22:49:38

Encontrar propiedades de un archivo desde Delphi.
 
¿Como puedo encontrar o accesar a las propiedades de un archivo guardado en Mi PC desde Delphi?

cHackAll 31-05-2007 23:08:58

?
 
Que clase de archivo y que propiedades exactamente? Te pregunto esto por que puedes obtener mas informacion dependiendo de que quieras hacer, al ser un .EXE (por ejemplo), puedes obtener su EntryPoint, espacio reservado inicial, Autor, Descripcion, etc, etc...

gonzalez 04-06-2007 21:53:43

Pues, necesito obtener su fecha de último acceso. Gracias de antemano.

cHackAll 04-06-2007 22:04:06

Ok
 
Siendo así, entonces más útil creo que es éste código no?

Código Delphi [-]
var
 hFile: Cardinal;
 CreationTime, LastAccessTime, LastWriteTime: TFileTime;
 SystemTime: TSystemTime;
begin
 hFile := CreateFile('c:\ntldr', GENERIC_READ, FILE_SHARE_READ + FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
 if hFile <> INVALID_HANDLE_VALUE then
  begin
   GetFileTime(hFile, @CreationTime, @LastAccessTime, @LastWriteTime);
   CloseHandle(hFile);
   FileTimeToSystemTime(LastAccessTime, SystemTime);
   Caption := DateTimeToStr(SystemTimeToDateTime(SystemTime))
  end
 else
  Caption := 'Error al acceder al archivo!';
end;

Espero te sirva, Suerte!

gonzalez 05-06-2007 21:59:20

Sí me sirve. Pero, ¿como podría crear un ciclo que me permita identificar documentos Word en mi disco duro (incluyendo carpetas)?

cHackAll 06-06-2007 03:51:25

Ok
 
Bueno, eso esta dividido en dos partes, la primera es recorrer todas las carpetas y subcarpetas de un directoriio o unidad... y la seguna es detectar el formato de cada archivo, en este caso debe ser del Word. Pero el Word reconoce N formatos así que para hacer una aplicacion que se ajuste a cualquier necesidad deberíamos abrir cada archivo con el Word en segundo plano, si éste no retorna error al abrirlo, significa que es un formato de texto reconocido. Este método engloba todo el universo de archivos Word existentes en una carpeta o unidad, sin embargo es muy costoso abrir todos los archivos con Word (pero permiritía poder recuperar archivos borrados), así que se puede revisar la asociacion, siendo un archivo asociado con el Word (Word.Document) entonces se podría reducir los intentos del Word.

Tambien sería más facil abrir cada archivo y revisar su cabezal... (primeros 64 bits)... obteniendo solo a aquellos que son Office.

Te comento todo esto para que tengas una idea de la respuesta que se ajusta mas con la pregunta que me hiciste, pues realmente puede ser tu necesidad. Concluí que por ahora basta ver que archivos tienen la extencion '.doc'... para eso te dejo la funcion 'Search'
Código Delphi [-]
var FindData: TWin32FindData;
 
function GetCardinal(var Buffer): Cardinal;
asm
 mov eax, [eax]
 and eax, 0DFDFDFDFh
end;
 
procedure Search(const Path: string);
var Handle, Ext: Cardinal;
begin
 Handle := FindFirstFile(PChar(Path + '\*.*'), FindData);
 if Handle <> INVALID_HANDLE_VALUE then
  begin
   with FindData do
    repeat
     if (dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
      begin
       if (cFileName <> string('.')) and (cFileName <> '..') then
        Search(Path + '\' + cFileName);
      end
     else
      begin
       Ext := StrLen(@cFileName);
       while (Ext <> 0) and (cFileName[Ext - 1] <> '.') do Dec(Ext);
       if (Ext <> 0) and (GetCardinal(cFileName[Ext]) = $00434F44) then
        Form1.ListBox1.AddItem(Path + '\' + cFileName, nil); // aca procesamos el archivo
      end;
    until not FindNextFile(Handle, FindData);
   Windows.FindClose(Handle);
  end;
end;

úsala como:

Código Delphi [-]
 Search('f:');
ó
 Search('f:\Mis documentos');

PD: La edite pues había un desbordamiento con 'Ext'

Saludos!

gonzalez 07-06-2007 20:32:58

Emplearé esa programación. muchas gracias por tu tiempo.


La franja horaria es GMT +2. Ahora son las 08:59:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi