Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при поиске файлов 
:(
    Опции темы
p0s0l
Дата 25.9.2003, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



А еще:
вызываться будет так:
Find(ParamStr(2));



--------------------
С уважением, г-н Посол.
PM   Вверх
Borland_Delphi_6
Дата 25.9.2003, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Че то я не допер,как это?


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Borland_Delphi_6
Дата 25.9.2003, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Цитата
if ((SearchRec.Attr and faDirectory) = faDirectory) and
  ((SearchRec.Attr and faSysFile) <> faSysFile) and
  (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin

Не работает.


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
p0s0l
Дата 25.9.2003, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Код
procedure Find(cDir : string);
var
SearchRec: TSearchRec; // информация о файде или каталоге
begin
if cDir[length(cDir)] <> '\' then cDir := cDir+'\';

if FindFirst(cDir + FileName, faAnyFile,SearchRec) = 0 then
begin
    repeat
          writeln(cDir +  SearchRec.Name);
          n := n + 1;
          inc(cnt);
     until FindNext(SearchRec) <> 0;
   FindClose(SearchRec);
end;

    // обработка подкаталогов текущего каталога
    if FindFirst(cDir + '*', faDirectory, SearchRec) = 0 then
    begin
       repeat
           if (SearchRec.Attr and faDirectory) <>0 then
               begin
                 // каталоги .. и . тоже каталоги,
                 // но в них входить не надо !!!
              if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
                     Find(cDir + SearchRec.Name); // выполнить поиск в подкаталоге
       until FindNext(SearchRec) <> 0;
       FindClose(SearchRec);
    end;
end;
.....
....
...
// щелчок на кнопке Поиск
begin
if ParamCount>0
then
begin
      FileName := paramStr(1);  // что искать
      cDir := paramStr(2);      // где искать
      n:=0;                    // кол-во найденных файлов
      Find(cDir);                    // начать поиск
end;



Это сообщение отредактировал(а) p0s0l - 26.9.2003, 15:45


--------------------
С уважением, г-н Посол.
PM   Вверх
Monty
Дата 26.9.2003, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

Репутация: нет
Всего: 27



p0s0l так в факе такая же ошибка! Вот я смотрю что моя программа тормoзит и не все дириктории обходит! А порою просто зависает, не смотря на то что я все учел hmmm.gif


Это сообщение отредактировал(а) Monty - 26.9.2003, 00:03


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
p0s0l
Дата 26.9.2003, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Дак блин, выяснит кто-нибудь наконец, на каких директориях гнется, или нет confused.gifconfused.gif!!!!
У меня XP,NTFS - нигде не гнется...



--------------------
С уважением, г-н Посол.
PM   Вверх
Monty
  Дата 26.9.2003, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

Репутация: нет
Всего: 27



Цитата(p0s0l @ 26.9.2003, 13:44)
Дак блин, выяснит кто-нибудь наконец, на каких директориях гнется, или нет confused.gifconfused.gif!!!!
У меня XP,NTFS - нигде не гнется...

В том то и дело что у меня по началу гнулась прога, потом я заглянул в этот топик и увидел в чем же ошибка! Рекурсивный обход я взял из нашего Фака ........ теперь все работает wink.gif
Лично у меня прога удалила все файлы и папки с извращеными именами и т.д. ........ а до этого зависала так что Терминировать не мог и жал RESET smile.gif

Это сообщение отредактировал(а) Monty - 26.9.2003, 14:57


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
p0s0l
Дата 26.9.2003, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата
потом я заглянул в этот топик и увидел в чем же ошибка!

В чем ошибка ?



--------------------
С уважением, г-н Посол.
PM   Вверх
Monty
  Дата 26.9.2003, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

Репутация: нет
Всего: 27



Цитата(p0s0l @ 26.9.2003, 14:43)
Цитата
потом я заглянул в этот топик и увидел в чем же ошибка!

В чем ошибка ?

У меня было:
Код
.........
if SearchRec.Attr = faDirectory then begin
 if (SearchRec.Name <> '' ) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..')
   then MyRemoveDir(sFileName);
   else begin
................

а стало:
Код
.............
if (SearchRec.Attr and faDirectory) <> 0 then begin
 if (SearchRec.Name <> '' ) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..')
   then MyRemoveDir(sFileName);
   else begin
................

При этом все отлично работает smile.gif ......... я случайно сам не ошибся?
Лично я в это еще не въехал smile.gif

PS и так: "SearchRec.Attr <> faDirectory" не работает ........


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Borland_Delphi_6
Дата 27.9.2003, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



p0s0l у мя твой код не работает sad.gif


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
p0s0l
Дата 27.9.2003, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Borland_Delphi_6, Ну выясни же наконец на каких каталогах вылетает!
Вот добавь такое (жирным выделено):
procedure Find
var
SearchRec: TSearchRec; // информация о файде или каталоге
f : TextFile;
begin
...
if ...
begin
...
AssignFile(f, 'log.txt');
Rewrite(f);
WriteLn(f, cDir + SearchRec.Name);
CloseFile(f);

Find
...
end;

Когда прога вылетит скажи что содержится в файле log.txt...

Это сообщение отредактировал(а) p0s0l - 27.9.2003, 11:45


--------------------
С уважением, г-н Посол.
PM   Вверх
Borland_Delphi_6
Дата 27.9.2003, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Теперь вообще все время гнется.... Тобишь я ее запускаю, даю парамметры, а она мне IO Errrrrrrrrrror!


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Akella
  Дата 27.9.2003, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



А я делаю так и ошибок не было ни разу
[CODE]Procedure ScanDir(Dir:String);//сканирование диска
Var
SearchRec:TSearchRec;
I: Byte;
begin
with fmFileMask, fmMain, DM do begin
Try
tSpis.DisableControls;//таблица, куда добавляются путь и имя файла
a:=False;
if Dir<>'' then//если передаваемый параметр не пуст
//добавить слеш если он отсутствует
if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
//если что-то найдено
if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
repeat
if A=True then BREAK;//прерываем сканирование
//если начало папки - все пропускаем
if (SearchRec.name='.') or (SearchRec.name='..') then continue;
//если найдена папка
if (SearchRec.Attr and faDirectory)<>0 then begin
ScanDir(Dir+SearchRec.name);//найдена папка: "Dir+SearchRec.name"
try
//если включено -искать папки- cbFolders - TCheckBox
if (cbFolders.Checked) then
begin//добавляем имя и путь
tSpis.Append;
tSpis.FieldByName('DirName').AsString:=ExtractFileName(Dir+SearchRec.name);
tSpis.FieldByName('PathName').AsString:=Dir+SearchRec.name;
tSpis.FieldByName('NoDisk').AsString:=tOpisNODISK.AsString;
tSpis.FieldByName('IsFolder').AsInteger:=0;
//если включено -импорт содержимого текстового файла, то добавляем это в Memo-
if (cbReadMe.Checked) and (edReadMe.Text<>'') then
begin//если файл найден, загружаем его содержимое в TDBMemo
if FileExists(dir+SearchRec.name+'\'+edReadMe.Text) then
try
dbMemo1.Lines.LoadFromFile(dir+SearchRec.name+'\'+edReadMe.Text);
except
abort;
end;
end;//if - readme
tSpis.Post;
end;//if - folders
except
beep;
showmessage('Произошла ошибка,'+#13+'Операция будет прервана!');
tSpis.Cancel;
exit;
end;//try-except
end//if
else begin//найден файл
try
//если включено -искать все файлы-
if (cbFiles.Checked) then begin
//если отключено -искать все файлы-
if not (cbAllFiles.Checked) then begin
//если расширение найденного файла соответствует списку -lbExt- (lbExt - TListBox)
For I:=0 to lbExt.Items.Count-1 do
if ((UpperCase(ExtractFileExt(ExtractFileName(Dir+SearchRec.name)))=
UpperCase(lbExt.Items.Strings[i]))) then
begin
tSpis.Append;
tSpis.FieldByName('DirName').AsString:=ExtractFileName(Dir+SearchRec.name);
tSpis.FieldByName('PathName').AsString:=ExtractFilePath(Dir+SearchRec.name);
tSpis.FieldByName('NoDisk').AsString:=tOpisNODISK.AsString;
tSpis.FieldByName('IsFolder').AsInteger:=1;//1-это не папка
tSpis.Post;
end;//if - UpperCase
end//if - AllFiles
else//если вкл. -все файлы-
begin
tSpis.Append;
tSpis.FieldByName('DirName').AsString:=ExtractFileName(Dir+SearchRec.name);
tSpis.FieldByName('PathName').AsString:=ExtractFilePath(Dir+SearchRec.name);
tSpis.FieldByName('IsFolder').AsInteger:=1;//1-это не папке (см событие в dbGrid)
tSpis.Post;
end;
end//if - Files
except
beep;
showmessage('Произошла ошибка,'+#13+'Операция будет прервана!');
exit;
end;//try-except
end;//else
fmStopScan.lbScan.Caption:=Dir+SearchRec.name;
application.ProcessMessages;

until FindNext(SearchRec)<>0;
finally
tSpis.EnableControls;
FindClose(SearchRec);
end;//try-finally
end;//with
end;[CODE]

Это сообщение отредактировал(а) dsergey - 27.9.2003, 23:21
PM MAIL   Вверх
p0s0l
Дата 28.9.2003, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Сделай перед вызовом Find(в самом Find'е) такое:
WriteLn(cDir + SearchRec.Name);
Вызывай проект так:
project1 c:\ *.exe >1.txt
(^^^ это пример, главное - жирное)
Потом скажи что будет в конце файла 1.txt...



--------------------
С уважением, г-н Посол.
PM   Вверх
Fantasist
Дата 29.9.2003, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
При этом все отлично работает  ......... я случайно сам не ошибся?
Лично я в это еще не въехал


Не ошибся. Attr - это набор битовых флагов. Если файл отвечает определенному атрибуту (скрытый, директория, системный и т.п.) устанавливается соответсвующий бит в Attr.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2351 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.