Приветствую Вас Гость | RSS

Delphi заготовки

Вторник, 26.11.2024, 23:29
Главная » 2012 » Май » 3 » Пример программы для отображение одинаковых файлов в каталоге
15:42
Пример программы для отображение одинаковых файлов в каталоге
для производственных нужд часто бывает необходима программа для выявления одинаковых файлов
написать подобную программу на самом деле не представляет особого труда

определимся какая структура данных нам будет нужна


  type

  Tfilelist=record
     crcValue:Cardinal; // крк-а файла будет расчитывать функции в Unit2 данного модуля
     filename:string; // имя первого файла
     list:array of string; // список файла крк- которых сходна
     count:integer; // кол-во файлов
  end;

    var
    Filelist:array of Tfilelist; // массив файлов

    FilelistCount:integer; // кол-во найденных файлов в папке

напишем не большую процедуру добавления файла в нашу структуру




  Procedure AddFileToList(Filename:string);
  var rs,x:integer;
  crc:Cardinal;
  begin
  if Filename<>'' then
  if fileage(Filename)>0 then begin   // если это файл
  rs:=-1;
  crc:=FileCRC32(Filename); // расчитываем его  CRC функция доступна в модули Unit2Crc.pas

  for X:=0 to FilelistCount-1 do
    if Filelist[x].crcValue=crc then begin // если файл уже есть то записываем в RS его номер
         rs:=x;
         break;
     end;
     if rs=-1 then begin // если инф. о файле нет то заносим информацию
        FilelistCount:=FilelistCount+1;
        Setlength(Filelist,FilelistCount);
        rs:=FilelistCount-1;
        Filelist[rs].count:=0;
        Filelist[rs].crcValue:=crc;
        Filelist[rs].filename:=ExtractFileName(Filename);
     end;

       Filelist[rs].count:=Filelist[rs].count+1;
       Setlength(Filelist[rs].list,Filelist[rs].count);
       Filelist[rs].list[Filelist[rs].count-1]:=Filename; // добавляем файл в список
       end;
  end;



берем стандартную заготовку вывода списка файлов


{
Path  - путь поиска
maska - маска поиска
recur - true  - искать и в подкаталогах
        false - искать только в указанной папке
}

 procedure FileFinder(Path: string;maska: string;recur: boolean);
var sr : TSearchRec;
begin
if (Path[Length(Path)]='\') then SetLength(Path,Length(Path)-1);
if FindFirst(Path+'\'+maska,faAnyFile,sr)=0
   then
      begin
         if (sr.Attr or faDirectory)=sr.Attr then
            begin
            if (recur=true) then
               begin
                  if (sr.name<>'.') and (sr.name<>'..') then
                  FileFinder(path+'\'+sr.Name,maska,recur);
               end
            end;
         while FindNext(sr) = 0 do
         if (sr.Attr or faDirectory)=sr.Attr then
            begin
            if (recur=true) then
               begin
                  if (sr.name<>'.') and (sr.name<>'..') then
                  FileFinder(path+'\'+sr.Name,maska,recur);
               end
            end
         else
                  AddFileToList(Path+'\'+sr.Name); // добавим нашу процедуру

      end;
   FindClose(sr);
end;



ну и самое интересное и простое

выводим список файлов которые уникальны в каталоге

var y,x:Integer;
begin
form1.ListBox1.Items.clear;
   for X:=0 to FilelistCount-1 do begin
      if Filelist[x].count=1 then begin
      form1.ListBox1.Items.Add(inttostr(Filelist[x].crcValue)+':'+Filelist[x].filename);
        for y:=0 to Filelist[x].count-1 do
          form1.ListBox1.Items.Add(Filelist[x].list[y]);
      end;

   end;
end;



снимок программы




файл проекта

/07_fajly_kotorye_vstrechajutsja_n_raz.zip
Просмотров: 1653 | Добавил: NetSoftWare | Рейтинг: 3.0/1
Всего комментариев: 1
1 NetSoftWare  
0

Имя *:
Email *:
Код *: