![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FindFirstFile, FindNextFile
Scott Storch © (2010-12-20 15:28:00)Будет ли лишним добавить после 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;
Игорь Шевченко (2010-12-20 16:13:00) [1]
> А как реализовать логику с while, используя api функции,
> у меня в контрольной сказано, сделать с использованием
> winapi функций, без дельфийских оберток, если сделаю как
> советуете препод может придраться.
пусть придирается.
Scott Storch (2010-12-20 16:11:00) [2]трудности в том что FindFirstFile в случае ошибки возвращает INVALID_HANDLE_VALUE, а FindNextFile - 0
Scott Storch (2010-12-20 16:08:00) [3]Ясн. спасибо.
А как реализовать логику с while, используя api функции, у меня в контрольной сказано, сделать с использованием winapi функций, без дельфийских оберток, если сделаю как советуете препод может придраться.
Andy BitOff (2010-12-20 15:43:00) [4]В случае возникновения неприятностей в текущей итерации цикла, на следующую итерацию мы выйдем со следующим значением FindRes.
Ega23 (2010-12-20 15:41:00) [5]
> можете объяснить почему FindNext(sr); в finally блоке?
if ((sr.Attr and faDirectory) = faDirectory) or
((sr.Name = '.') or (sr.Name = '..')) then
Continue;
Чтобы не писать
then
begin
FindRes := FindNext(sr);
Continue;
end;
Scott Storch (2010-12-20 15:38:00) [6]thx.
можете объяснить почему FindNext(sr); в finally блоке?
Ega23 (2010-12-20 15:33:00) [7]
> Будет ли лишним добавить после 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;