Ver Mensaje Individual
  #6  
Antiguo 06-06-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Reputación: 20
cHackAll Va por buen camino
Cool 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!

Última edición por cHackAll fecha: 06-06-2007 a las 03:56:16.
Responder Con Cita