Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Compare Files


Scot Storch ©   (2010-01-29 16:04:00) 

Поставленая задача: сравнить содержимое двух папок (условно Target и Source). Вывести список файлов, которые есть в папке Target но нет в папке Source.

P.S. Если в папке Target лежит файл как Target\1\1.dat а в папке Source он находится как Source\1.dat считать, что файла нет.

Сделал так:


procedure ScanDirTarget(const sDirTarget, sDirSource: string);
var
 nRes: Integer;
 sFileFound: string;
 sRec: TSearchRec;
begin
 nRes := FindFirst(sDirTarget + '\*.*', faAnyFile, sRec);
 while nRes = 0 do
 begin
   if (sRec.Name <> '.') and (sRec.Name <> '..') then
   begin
     if (sRec.Attr and faDirectory) = faDirectory then
       ScanDirTarget(sDirTarget + '\' + sRec.Name, sDirSource + '\' +
         sRec.Name)
     else
     begin
       sFileFound := sDirSource + '\' + sRec.Name;
       if not FileExists(sFileFound) then
         form6.ListBox3.Items.Add(sFileFound)
     end;
   end;
   nRes := FindNext(sRec);
 end;
 FindClose(sRec);
end;


Может можно какие-то моменты упростить или что-то не учел. Вобщем, хотелось бы услышать критику.


Игорь Шевченко   (2010-01-29 16:49:00) [1]

а нафиг кучу веток заводить ?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1264681015&n=18


12   (2010-01-29 16:16:00) [2]

ну а где сравнение с 1.dat ?


Virgo_Style   (2010-01-29 16:15:00) [3]

Вместо ... +'\'  я бы написал IncludeTrailingPathDelimiter(...)

try-finally вроде недавно где-то обсуждалось применительно именно к findfirst...findclose.


DVM   (2010-01-29 16:09:00) [4]


>  Вобщем, хотелось бы услышать критику.



> form6.ListBox3.Items.Add(sFileFound)

нехорошо

лучше так:

procedure ScanDirTarget(const sDirTarget, sDirSource: string; AList: TStrings);

...

AList.Add(sFileFound);


Наверх

Титульная страница Поиск, карта сайта Написать письмо