Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
Вниз
Поиск дубликатов файлов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.044 c