Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
1-1158590290
dreamse
2006-09-18 18:38
2006.10.29
Вопрос по работе с BLP


15-1159885912
guav
2006-10-03 18:31
2006.10.29
Формат файла.


2-1160568882
Новичоккк
2006-10-11 16:14
2006.10.29
Integer в 32х и 64х битных системах


1-1158728490
sapsi
2006-09-20 09:01
2006.10.29
Произвольный цвет пункта меню в главном меню


3-1157456549
pic509
2006-09-05 15:42
2006.10.29
"Залипание" данных при вызове Хранимой процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский