Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сравнение папок


Автор: Nutz 29.1.2010, 15:57
Поставленая задача: сравнить содержимое двух папок (условно 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;


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

Автор: Frees 29.1.2010, 21:47
faAnyFile это не все файлы... может некоторые пропустить

Автор: chip_and_dayl 29.1.2010, 22:06
Frees
Как раз это ищет любой файл smile

Автор: Демо 29.1.2010, 22:52
Цитата(Nutz @  29.1.2010,  15:57 Найти цитируемый пост)
Может можно какие-то моменты упростить или что-то не учел. Вобщем, хотелось бы услышать критику. 


1. После FindFirst код нужно внести в блок try..finally..end
2. В процедуру лучше передавать ссылку на объект-список и заполнять его, а не писать form6... 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)