Быстрое чтение имен файлов из каталога

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Azazaz
новенький
Сообщения: 41
Зарегистрирован: 21.04.2015 19:00:03

Быстрое чтение имен файлов из каталога

Сообщение Azazaz »

В fileutil есть функция загрузки содержимого каталога FindAllFiles которая возвращает TStringList вида:
Путь\Файл0
Путь\Файл1
Путь\Файл2
Путь\Файл3
...

Так вот есть ли иной метод прочитать содержимое так что бы результат не содержал "Путь\"? Мне нужен предельно простой и быстрый метод.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Azazaz писал(а):Мне нужен предельно простой и быстрый метод.

тогда используй функцию SuperFindAllFiles()!

если не знаешь где её найти, то выглядит она так:

Код: Выделить всё

function SuperFindAllFiles(const SearchPath: String; SearchMask: String = '';
  SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory): TStringList; overload;
var
  i : integer;
  p : integer;
begin
  Result:=FindAllFiles(SearchPAth, SearchMask, SearchSubDirs, DirAttr);
  if Assigned(Result) then begin
    p:=length(IncludeTrailingPathDelimiter(SearchPath))+1;
    for i:=0 to Result.Count-1 do
      Result[i]:=Copy(Result[i], p, maxint);
  end;
end;

Супер быстро! Супер просто!
Azazaz
новенький
Сообщения: 41
Зарегистрирован: 21.04.2015 19:00:03

Сообщение Azazaz »

Нашел:

Код: Выделить всё

var
  FL: TStringList; SR: TSearchRec;

...

FL:= TStringList.Create;
 if FindFirst(Path + DirectorySeparator + '*', faAnyFile, SR)=0 then begin
  repeat FL.Append(SR.Name);
  until FindNext(SR)<>0;
 end;
 FindClose(SR);
Azazaz
новенький
Сообщения: 41
Зарегистрирован: 21.04.2015 19:00:03

Сообщение Azazaz »

Когда читаешь содержимое каталога через FindFirst, FindNext то первыми файлами всегда идут:
1. "."
2. ".."
Вопросы:
Что за файлы такие?
Подобный метод чтения работает и на других платформах? (кроме Windows)
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Почитай про "Относительный и абсолютный путь" в файловых системах.
Azazaz
новенький
Сообщения: 41
Зарегистрирован: 21.04.2015 19:00:03

Сообщение Azazaz »

.. – это каталог верхнего уровня. Тут понятно.
. – указатель на то что файл находиться в текущем каталоге?

Я как параметр передаю faAnyFile что как бы исключает возврат указателей на каталоги, почему тогда возвращается ".." (как бы каталог априори)?
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

Azazaz писал(а): как параметр передаю faAnyFile что как бы исключает возврат указателей на каталоги


Каталог внезапно тоже является файлом, так что указание этого параметра ничего не исключает.
Анализ на то, каталог это или нет, должен производиться после того, как запись о файле прочитана. Там же - анализ на расширение, совпадение имени и прочее.
Ответить