
26.07.2007, 17:06
|
Прохожий
|
|
Регистрация: 23.07.2007
Адрес: Ростов на Дону
Сообщения: 10
Репутация: 10
|
|
??? Поиск файлов по маске с указанием размера
народ всем привет помогите разобраться с кодом нарыл на сайте ищет папки во всех подкаталогах по маске и сохраняет это дело в файл...
вообщем пытался модифицировать его чтобы выводились размеры перовначально хотел сделать типо такого чтобы к примеру мы в маске использовали мп3 и результат был таким
C:\Ария\ = 30 Мб
C:\Инструментал\ = 50 Мб
короче учитывался размер файлов по маске а потом они складывались и писались в файл...
ей Богу целый день сидел мострячил функцию filesize() не пойму как ее тут применить в каком месте ???  видимо тупею....8-(
Код:
procedure CreateFileList (LogFile,StartDir: String; Mask: String ='*.*';
FindSubDir: Boolean = True);
var
hSRFile,hSRFolder,hFile,nBytesWritten: Cardinal;
fndFile,fndFolder: WIN32_FIND_DATA;
FileName: PChar;
i: Byte;
begin
if StartDir[Length(StartDir)] <> '\' then
StartDir := StartDir+'\';
i := 1;
while i <> Length(Mask) do begin
hSRFile := FindFirstFile(PChar(StartDir+Copy(Mask,i,5)),fndFile);
inc(i,6);
if hSRFile <> INVALID_HANDLE_VALUE then
begin
repeat
if (fndFile.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
Continue;
hFile := CreateFile(PChar(LogFile),GENERIC_WRITE,0,nil,OPEN_ALWAYS,0,0);
if hFile <> INVALID_HANDLE_VALUE then
begin
FileName := PChar(StartDir+fndFile.cFileName+#13#10);
SetFilePointer(hFile,0,nil,FILE_END);
WriteFile(hFile,FileName^,Length(FileName),nBytesWritten,nil);
CloseHandle(hFile);
end;
until not FindNextFile(hSRFile,fndFile);
Windows.FindClose(hSRFile);
end;
end;
if FindSubDir then
begin
hSRFolder := FindFirstFile(PChar(StartDir+'*.*'),fndFolder);
if hSRFolder <> INVALID_HANDLE_VALUE then
begin
repeat
if ((fndFolder.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) and
(fndFolder.cFileName <> '..') and (String(fndFolder.cFileName) <> '.')
then
CreateFileList(LogFile,StartDir+fndFolder.cFileName+'\',Mask);
until not FindNextFile(hSRFolder,fndFolder);
Windows.FindClose(hSRFolder);
end;
end;
end;
// Пример вызова:
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateFileList('c:\FileList.txt','c:\','*.doc;*.txt;*.log',True);
end;
__________________
Невозможного нет! На невозможное нужно чуть больше времени! ! ! (с) Den Braun
|