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

Вниз

FindFirstFile, FindNextFile   Найти похожие ветки 

 
Scott Storch   (2010-12-20 15:28) [0]

Будет ли лишним добавить после FindFirst, перед try условие:

hFind <> INVALID_HANDLE_VALUE


procedure Tlocal_upds_analyzer.local_upds_prepare(var APrepared: TList<TPoint>);
var
 find_data: _WIN32_FIND_DATA;
 hFind: Cardinal;
begin
 hFind := FindFirstFile(PChar(Flocal_upds_dir + "upd_*_to_*.zip"), find_data);
 try
   // <-- ?
   repeat
     // ...

   until
     not FindNextFile(hFind, find_data);
 finally
   FindClose(hFind);
 end;

end;


 
Ega23 ©   (2010-12-20 15:33) [1]


> Будет ли лишним добавить после FindFirst, перед try условие:



procedure TFTSDocList.ScanDir(DirName, FileExt: string; StoreExt: Boolean);
var
 FindRes: Integer;
 sr: TSearchRec;
begin

 DirName := IncludeTrailingPathDelimiter(DirName);
 FindRes := FindFirst(DirName + "*." + FileExt, faAnyFile, sr);
 try
   while (FindRes = 0) do
   begin
     try
       if ((sr.Attr and faDirectory) = faDirectory) or
          ((sr.Name = ".") or (sr.Name = "..")) then
         Continue;
       with AddItem do
       begin
         if StoreExt then
           DocFileName := sr.Name
         else
           DocFileName := ChangeFileExt(sr.Name, "");
         DocID := GetNextDocID;
       end;
     finally
       FindRes := FindNext(sr);
     end;
   end;

 finally
   FindClose(sr);
 end;


 
Scott Storch   (2010-12-20 15:38) [2]

thx.

можете объяснить почему FindNext(sr); в finally блоке?


 
Ega23 ©   (2010-12-20 15:41) [3]


> можете объяснить почему FindNext(sr); в finally блоке?

if ((sr.Attr and faDirectory) = faDirectory) or
         ((sr.Name = ".") or (sr.Name = "..")) then
        Continue;


Чтобы не писать
then
begin
  FindRes := FindNext(sr);
  Continue;
end;


 
Andy BitOff ©   (2010-12-20 15:43) [4]

В случае возникновения неприятностей в текущей итерации цикла, на следующую итерацию мы выйдем со следующим значением FindRes.


 
Scott Storch   (2010-12-20 16:08) [5]

Ясн. спасибо.

А как реализовать логику с while, используя api функции, у меня в контрольной сказано, сделать с использованием winapi функций, без дельфийских оберток, если сделаю как советуете препод может придраться.


 
Scott Storch   (2010-12-20 16:11) [6]

трудности в том что FindFirstFile в случае ошибки возвращает INVALID_HANDLE_VALUE, а FindNextFile - 0


 
Игорь Шевченко ©   (2010-12-20 16:13) [7]


> А как реализовать логику с while, используя api функции,
>  у меня в контрольной сказано, сделать с использованием
> winapi функций, без дельфийских оберток, если сделаю как
> советуете препод может придраться.


пусть придирается.



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

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

Наверх




Память: 0.48 MB
Время: 0.006 c
15-1290170995
Юрий Зотов
2010-11-19 15:49
2011.03.13
Реальная история


2-1292831796
student22
2010-12-20 10:56
2011.03.13
XML


15-1291066179
Юрий
2010-11-30 00:29
2011.03.13
С днем рождения ! 30 ноября 2010 вторник


2-1292718994
CrHD
2010-12-19 03:36
2011.03.13
Варианты подгрузки кода


1-1248707578
Oleg
2009-07-27 19:12
2011.03.13
Docking