Как при помощи Лазаруса в ОС Линукс (без использования визуальных компонентов) получить список:
1. каталогов;
2. файлов;
в заданной директории, для того что б записать в динамический массив?
Модератор: Модераторы
qivi писал(а):Как они различаются (каталоги файлы)?
if ((fs.Attr and faDirectory) <> 0) //если каталог,
var sf:TSearchRec;
...
if (sf.Name='.') or (sf.Name='..') then showmessage (sf.Name);
var sf:TSearchRec;
...
if (sf.Name<>'.') or (sf.Name<>'..') then showmessage (sf.Name);
А если попробовать or на and поменять?
var
FileList: TStringList;
i: integer;
Sr: TSearchRec;
Path: AnsiString;
begin
FileList := TStringList.Create;
i := FindFirst(Path + '*.' + OutExt, faAnyFile, Sr);
while i = 0 do
begin
if (Sr.Name <> '.') or (Sr.Name <> '..') then FileList.Add(Sr.Name);
i := FindNext(Sr);
Application.ProcessMessages;
end;
SysUtils.FindClose(Sr);
end;
Vadim писал(а):qivi
А если попробовать or на and поменять?
qivi писал(а):Ну... ОР - это у нас "или", АНД - и... не может же sf.Name быть равно обоим значениям...
qivi писал(а):if (sf.Name<>'.') or (sf.Name<>'..') then showmessage (sf.Name);
Alexx2000 писал(а):qivi писал(а):- не равно, а не равно обоим может.
var
searchResult : TSearchRec;
begin
// Пробуем найти каталоги выше текущего каталога
SetCurrentDir('..');
if FindFirst('*', faDirectory, searchResult) = 0 then
begin
repeat
// Показываем только каталоги
if (searchResult.attr and faDirectory) = faDirectory then ShowMessage('Directory = '+searchResult.Name);
until FindNext(searchResult) <> 0;
// Должен освободить ресурсы, используемые этими успешными, поисками
FindClose(searchResult);
end;
end;
qivi писал(а):Равенство отрабатывает, неравинсво нет... мистика какая то...
Alexx2000 писал(а):qivi писал(а):Равенство отрабатывает, неравинсво нет... мистика какая то...
Никакой мистики, в данном случае надо использовать and, т.к. c or условие выполняется если имя файла не равно хотя бы одному имени из условий, т.е. фактически условие всегда равно True.
procedure TSearch_Thread.scanFileTree(strNode: string);
var SR: TSearchRec;
str:string;
begin
str:= SysToUTF8(strNode);
if FindFirst(str+'\*', faAnyFile, SR) = 0 then
repeat
str:= SysToUTF8(SR.Name);
if not ((str = '.')or(str = '..')or(str = '...'))then
begin
if (sr.Attr = faDirectory) then
begin
{Тут обрабатывается для папок}
end else
begin
{Тут обрабатывается для файлов}
end;
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46