Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2008, 18:19   #1
student_63
Пользователь
 
Аватар для student_63
 
Регистрация: 07.11.2007
Сообщений: 92
Сообщение Поиск файлов

Здравствуйте, господа, подскажите как написать программу, которая производит поиск одинаковых файлов, хранящихся в различных каталогах, причем, вводить имя файла и каталога не следует (по всему винту)
Я уверен, вы согласитесь со мной... что если
со страницей 534 мы встречаемся во второй главе, то первая глава должна быть невыносимо длинной.
- ШЕРЛОК ХОЛМС
student_63 вне форума Ответить с цитированием
Старый 07.03.2008, 18:29   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Запоминать все пройденные файлы. Для каждого номера проверять нет ли его в списке уже пройденных.

Кроме того для файла нужно вычислить нечто вроде контрольной суммы чтобы находить одинаковые файлы даже если они переименованы.

З.Ы. Шерлок был неоднозначен. При таких условиях может быть невыносимо длинной вторая глава или предисловие.
alexBlack вне форума Ответить с цитированием
Старый 07.03.2008, 18:33   #3
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

На форуме столько раз обсуждали поиск файлов, осталось только покусочкам собрать.

Ишеш так
Код:
...
var SearchRec:TSearchRec 
...
FindFirst(FileMask, FFileAttr, SearchRec) // функция поиска
...
SearchRec.Name // это имя, так же есть и атрибуты.
...
FindNext(SearchRec) // это искать дальше
...
FileMask
типа 'C:\*.*' искать будет только в той директории какую укажешь.

FFileAttr:
faReadOnly
faHidden
faSysFile
faVolumeID
faDirectory
faArchive
faSymLink
faAnyFile

Примерный код надо?
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 07.03.2008, 18:45   #4
student_63
Пользователь
 
Аватар для student_63
 
Регистрация: 07.11.2007
Сообщений: 92
По умолчанию

Да, примерный код желательно, любая инфа нужна. Я хотел помещать все файлы в массив: 1 поле имя файла, 2 поле путь, 3 поле контр. сумма. Так вот как получить мне эту конт. сумму и путь. Подскажите, пожалуйста
Я уверен, вы согласитесь со мной... что если
со страницей 534 мы встречаемся во второй главе, то первая глава должна быть невыносимо длинной.
- ШЕРЛОК ХОЛМС
student_63 вне форума Ответить с цитированием
Старый 07.03.2008, 18:47   #5
student_63
Пользователь
 
Аватар для student_63
 
Регистрация: 07.11.2007
Сообщений: 92
По умолчанию

С файловой системой еще не работал ни разу. Может можно использовать API- фун-ии???
Я уверен, вы согласитесь со мной... что если
со страницей 534 мы встречаемся во второй главе, то первая глава должна быть невыносимо длинной.
- ШЕРЛОК ХОЛМС
student_63 вне форума Ответить с цитированием
Старый 07.03.2008, 18:57   #6
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Функция удаляет файлы из указанной папки, с Result пока не очень.
Код:
function DelDir(DirName,NotDel:string):boolean;
var
SearchRec:TSearchRec;
hFindFile:integer;
begin
result:=false;
hFindFile:=FindFirst(DirName+'\*.*',faAnyFile,SearchRec);
while hFindFile=0 do
begin
if ((SearchRec.Attr and faDirectory)=0) then
if DeleteFile(DirName+'\'+SearchRec.Name) then result:=true else result:=false else
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') and (SearchRec.Name <> NotDel) then
DelDir(DirName+'\'+SearchRec.Name,'');
hFindFile:=FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
Функция сканирует указанный путь на наличие файла и записывает путь в TstringList
Код:
function ScanDiskToFile(FileMask,SearchFile: string):TstringList;
var
dtr,Str:TstringList;
SearchRec:TSearchRec;
hFindFile:integer;
begin
hFindFile:=FindFirst(FileMask+'\*.*',faAnyFile,SearchRec);
while hFindFile=0 do
 begin
  application.ProcessMessages;
  if ((SearchRec.Attr and faDirectory)=0) then
   begin
    if SearchRec.Name=SearchFile then
    dtr.Add(FileMask+'\'+SearchFile);
    result:=dtr;
   end
  else
   if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
    begin
     str:=ScanDiskToFile(FileMask+'\'+SearchRec.Name,SearchFile);
     try
     if str.Names[str.Count-1] <> '' then dtr.Add(FileMask+'\'+SearchFile);
     except
     end;
    end;
  hFindFile:=FindNext(SearchRec);
 end;
FindClose(SearchRec);
end;
Это простые и почти одинаковые функции, главное логику поймёте и напишите свою. (как я когда-то)
Всё гениальное - просто!

Последний раз редактировалось Air; 07.03.2008 в 19:01.
Air вне форума Ответить с цитированием
Старый 07.03.2008, 19:00   #7
student_63
Пользователь
 
Аватар для student_63
 
Регистрация: 07.11.2007
Сообщений: 92
По умолчанию

Цитата:
Кроме того для файла нужно вычислить нечто вроде контрольной суммы чтобы находить одинаковые файлы даже если они переименованы.
как мне реализовать это в дельфи?
Air, спасибо за фун-ии, буду пытаться применять их в своем проекте
Я уверен, вы согласитесь со мной... что если
со страницей 534 мы встречаемся во второй главе, то первая глава должна быть невыносимо длинной.
- ШЕРЛОК ХОЛМС
student_63 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск *.csv и *.xls файлов Len@ Microsoft Office Excel 18 28.07.2008 22:31
Поиск файлов LeoN Общие вопросы Delphi 5 25.11.2007 22:54
поиск файлов KORN Компоненты Delphi 3 12.10.2007 05:42
Поиск файлов necky Общие вопросы Delphi 10 31.08.2007 00:27