Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Поиск дубликатов файлов   Найти похожие ветки 

 
kyn66 ©   (2006-10-05 11:41) [0]

Приветствую мастеров! Могет есть у кого исходники софтинки толковой САБЖ?


 
Игорь Шевченко ©   (2006-10-05 11:52) [1]

Критерий толковости не озвучен


 
Alien1769 ©   (2006-10-05 12:05) [2]

FindFist, FindNext ?


 
Kolan ©   (2006-10-05 12:09) [3]


> Alien1769 ©   (05.10.06 12:05) [2]

И TFileStream


 
Ганна Юхимівна   (2006-10-05 12:28) [4]

Есть.

Полегчало ?


 
Alien1769 ©   (2006-10-05 13:17) [5]


>
> > Alien1769 ©   (05.10.06 12:05) [2]
>
> И TFileStream

Ну тогда еще и хелп родной в помощь по FindFist, FindNext.


 
kyn66 ©   (2006-10-05 14:02) [6]

Имеется ввиду по содержимому как отыскать...


 
Vaitek__   (2006-10-05 14:02) [7]

Я писал. Но случайно стер.


 
Игорь Шевченко ©   (2006-10-05 14:13) [8]

kyn66 ©   (05.10.06 14:02) [6]

Есть. Дальше что ?


 
Kolan ©   (2006-10-05 14:18) [9]


> Имеется ввиду по содержимому как отыскать...

1.Есть файл, который надо сравнить.
2. Перебираем фсе файлы на диске:). Каждый из них открываем и сравниваем с файлом из п. 1.

Чем пользоваться уже сказали.


 
Ученик чародея ©   (2006-10-05 15:06) [10]


function TPArchiveForm.FileLockCheck(path:string):boolean;
var sr:Tsearchrec;
var found:integer;
var FStr:TFileStream;
begin
 Result:=False;
 //
 found:=FindFirst(path + "\*.*", FaAnyfile, sr);
 while (found = 0) and not (TryToStop) do
   begin
   if (sr.name <> ".") and (sr.name <> "..") then
     begin
     if (sr.attr and FaDirectory) = FaDirectory then
         begin
         Result:=FileLockCheck(path+"\"+sr.name);
         end
       else
         begin
         //try to lock
         ItemLabel.Caption:=path+"\"+sr.name;
         FStr:=nil;
         try
           //здесь кроме простого открытия производим вычисление контрольной суммы файла, лучше 64-битное, заносим в динамический массив КС/путь к файлу а затем сравниваем
           FStr:=TFileStream.Create(path+"\"+sr.name,fmOpenRead or fmShareExclusive);
           FStr.Free;
         except on E:Exception do
           begin
           FStr.Free;
           Result:=True;
           end;
         end;
         end;
     end;
   if Result then Break;
   found:=findnext(sr);
   end;
 FindClose(sr);
end;


 
[wl] ©   (2006-10-05 15:46) [11]

if (sr.name <> ".") and (sr.name <> "..") then

неэффективно, лучше

if (sr.name[1] <> ".") then


 
Ученик Чародея ©   (2006-10-05 15:50) [12]


> [wl] ©   (05.10.06 15:46) [11]
> if (sr.name <> ".") and (sr.name <> "..") then
>
> неэффективно, лучше
>
> if (sr.name[1] <> ".") then


По сранению с файловыми операциями, 3 команды процессора или 6 команд несущественно.


 
[wl] ©   (2006-10-05 16:08) [13]

это не совсем так. При сравнении строк происходит вызов процедуры сравнения (в отличие от сравнения чара с константой), а кроме того, по два раза вызываются функции создания и удаления строк "." и "..".
но в целом, согласен, винт медленнее.


 
Ketmar ©   (2006-10-05 16:23) [14]

>[11] [wl](c) 5-Oct-2006, 15:46
>неэффективно, лучше
>if (sr.name[1] <> ".") then
только это баг. представим имя файла ".config". ы?


 
Palladin ©   (2006-10-05 16:23) [15]


> по два раза вызываются функции создания и удаления строк
> "." и "..".

ничего подобного, это константы


 
[wl] ©   (2006-10-05 16:29) [16]

а, ну да, файлы без имени - это всякие настройки из портированных программ от линукса, забыл про них.


 
Gero ©   (2006-10-05 16:40) [17]

> [11] [wl] ©   (05.10.06 15:46)

А если имя .txt ?


 
Gero ©   (2006-10-05 16:41) [18]

> [16] [wl] ©   (05.10.06 16:29)

Файлы без имени — это уже не файлы по определению.


 
Ketmar ©   (2006-10-05 16:48) [19]

>[16] [wl](c) 5-Oct-2006, 16:29
>из портированных программ от линукса
и не только. я, например, тоже люблю такие делать. %-)


 
kyn66 ©   (2006-10-06 10:00) [20]

>> Игорь Шевченко ©   (05.10.06 14:13) [8]

> (05.10.06 14:02) [6] Есть. Дальше что ?


Дык глянуть-быб ;-)


 
Игорь Шевченко ©   (2006-10-06 10:22) [21]

kyn66 ©   (06.10.06 10:00) [20]

А чего глядеть - алгоритм описан в [10], реализация у всех своя.


 
Slym ©   (2006-10-06 12:14) [22]

[10] не эфективно- на все файлы хеш считать тяжело... надо для файлов с одинаковым размером
Лучше пройтись по диску запомнить все имена файлов и их размер например в TStringList.Add(FileName,pointer(size)
далее смотрим файлы с одинаковым размером и считаем на них хеш напр. MD5 и сравниваем хеши.


 
Alien1769 ©   (2006-10-06 12:29) [23]


> [10] не эфективно- на все файлы хеш считать тяжело... надо
> для файлов с одинаковым размером


зип файл Pdoxusrs.net <> tmp файл Pdoxusrs.net
хотя размер и имена одинаковые...


 
Slym ©   (2006-10-06 12:32) [24]

Но хеши то у них разные...
Зачем сравнивать файлы с разным размером? Они подефолту разные


 
Alien1769 ©   (2006-10-06 12:36) [25]


> Но хеши то у них разные...

эта .. для автора больше..


 
VirEx ©   (2006-10-06 18:14) [26]

а лучше всего напрямую с MFT поработать (если NTFS?)


 
Alex Konshin ©   (2006-10-07 12:12) [27]

> Slym ©   (06.10.06 12:14) [22]
> [10] не эфективно- на все файлы хеш считать тяжело... надо
> для файлов с одинаковым размером
> Лучше пройтись по диску запомнить все имена файлов и их
> размер например в TStringList.Add(FileName,pointer(size)
> далее смотрим файлы с одинаковым размером и считаем на них
> хеш напр. MD5 и сравниваем хеши.

А у меня еще хитрее сделано: у меня два хеша считается и хранится. Сначала хеш на первый сектор файла, и только если он совпадает, считается хеш всего файла. Т.е. у меня считаются хеши только по необходимости.



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.048 c
15-1158760477
tovarish
2006-09-20 17:54
2006.10.29
Альтернатирвный StringGrid


15-1160107247
Tab
2006-10-06 08:00
2006.10.29
Структура организации данных векторной карты


2-1161002759
Андрей Иванов
2006-10-16 16:45
2006.10.29
Раскраска столбцов в StringGrid


15-1158748854
Колдун
2006-09-20 14:40
2006.10.29
Нумерованный список в RichEdit


2-1160998957
anonymousss
2006-10-16 15:42
2006.10.29
ламерский вопрос