Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Аналог TSearchRec, FindFirst, FindNext под Линукс / 25 сообщений из 42, страница 1 из 2
17.07.2020, 09:44
    #39980771
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
Есть функция подсчета количества файлов в паке с подпапками для Windows
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Function GetDocsCount(Dir: String; count: integer): integer;
Var
 SearchRec: TSearchRec;
begin
//добавляем все найденные файлы в таблицу
 try
   if Dir <> '' then Dir := IncludeTrailingPathDelimiter(Dir);
   if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
     repeat
       if (SearchRec.name='.') or
          (SearchRec.name='..') or
          (AnsiUpperCase(SearchRec.name) = AnsiUpperCase(sThumbnailFileName)) or
          (SearchRec.Name = '') then continue;
       if ((SearchRec.Attr and faDirectory) <> 0) then
         count := GetDocsCount(Dir + SearchRec.name, count) //we found Directory: "Dir+SearchRec.name"
       else
         begin
           Inc(count);
           
         end;

     until FindNext(SearchRec) <> 0;

 finally
   FindClose(SearchRec);
 end;
 result := count;
end;



А как эта функция будет "выглядеть" для Линукса?
Как ее переписать для Линукса?
...
Рейтинг: 0 / 0
17.07.2020, 09:47
    #39980773
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
В линуксах не работает System.IOUtils?
...
Рейтинг: 0 / 0
17.07.2020, 09:53
    #39980777
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
Я не знаю, я ещё ни разу не писал под линукс, примеров не нашёл.
...
Рейтинг: 0 / 0
17.07.2020, 09:58
    #39980783
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
Начинаю припоминать....
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Standard_RTL_Path_Functions_across_the_Supported_Target_Platforms

с Андроидом немного работал
...
Рейтинг: 0 / 0
17.07.2020, 10:03
    #39980786
Vizit0r
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
X11
Я не знаю, я ещё ни разу не писал под линукс, примеров не нашёл.


а ты ищи примеры работы с классами из System.IOUtils - они мультиплатфоменные все.
...
Рейтинг: 0 / 0
17.07.2020, 10:13
    #39980792
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
Нашел такое
http://docwiki.embarcadero.com/Libraries/Rio/en/System.IOUtils.TSearchOption
http://docwiki.embarcadero.com/CodeExamples/Rio/en/DirectoriesAndFilesEnumeraion_(Delphi)
http://docwiki.embarcadero.com/Libraries/Rio/en/System.IOUtils.TDirectory.GetFiles


Я так подразумеваю, что код будет такой:
Код: pascal
1.
2.
3.
4.
Function GetDocsCount(Dir: String): integer;
begin
  result := Length(TDirectory.GetFiles(dir, '.', TSearchOption.soAllDirectories));
end;
...
Рейтинг: 0 / 0
17.07.2020, 10:23
    #39980805
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
А откуда ты взял, что в Линуксе это не будет работать?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function FindFirst(const Path: string; Attr: Integer;
  var F: TSearchRec): Integer;
const
  faSpecial = faHidden or faSysFile or faDirectory;
{$IFDEF MSWINDOWS}
...
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
...
{$ENDIF POSIX}
...
Рейтинг: 0 / 0
17.07.2020, 10:25
    #39980808
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
1. Ни откуда не взял, просто предположил.
2. Модуль System.IOUtils более новый, т.е. продвинутый, современный. Думаю, что его более правильно использовать.
...
Рейтинг: 0 / 0
17.07.2020, 10:28
    #39980810
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
Вопрос по маске
Код: pascal
1.
GetFiles(dir, '*.JPEG *.BMP *.PNG *.GIF', TSearchOption.soAllDirectories)



Как правильно ввести маску для поиска нескольких разных типов?
В документации описано только то, что якобы можно использовать только *.exe - т.е. один тип.
Как правильно? Через запятую, через пробел? Или вообще нельзя мульти маску использовать?
...
Рейтинг: 0 / 0
17.07.2020, 10:30
    #39980812
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
X11
Через запятую, через пробел?


Методом научного тыка определил, что можно через точку с запятой. Но это для винды, а для Линукса?
...
Рейтинг: 0 / 0
17.07.2020, 10:33
    #39980813
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
X11
X11
Через запятую, через пробел?


Методом научного тыка определил, что можно через точку с запятой. Но это для винды, а для Линукса?

GetFiles написан на дельфи. На кой его писать отдельно для каждой платформы?

Но исходники дадут более точный ответ.
...
Рейтинг: 0 / 0
17.07.2020, 11:09
    #39980826
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
X11
1. Ни откуда не взял, просто предположил.
2. Модуль System.IOUtils более новый, т.е. продвинутый, современный. Думаю, что его более правильно использовать.

Эти вещи просто более модная обертка над все теми же функциями из SysUtils
...
Рейтинг: 0 / 0
17.07.2020, 11:35
    #39980839
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
Fr0sT-Brutal
Эти вещи просто более модная обертка над все теми же функциями из SysUtils


судя по исходникам, - нет
...
Рейтинг: 0 / 0
17.07.2020, 11:35
    #39980840
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
http://docwiki.embarcadero.com/Libraries/Rio/en/System.IOUtils.TDirectory.TFilterPredicate

ну на крайний случай можно свою функцию (анонимную) написать, которая будет определять, включать ли файл в массив
...
Рейтинг: 0 / 0
17.07.2020, 11:38
    #39980841
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
wadman
Но исходники дадут более точный ответ.


посмотрел, добрался до TMask.MatchesMaskStates(), так и не понял, какой разделитель используется, если вообще его там можно использовать
...
Рейтинг: 0 / 0
17.07.2020, 12:10
    #39980857
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
тут огромная статья с примерами
http://www.proghouse.ru/programming/126-ioutils
...
Рейтинг: 0 / 0
17.07.2020, 12:20
    #39980865
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
X11
X11
Через запятую, через пробел?


Методом научного тыка определил, что можно через точку с запятой. Но это для винды, а для Линукса?


В общем, так
GetFiles(dir, '*.JPEG *.BMP *.PNG *.GIF', TSearchOption.soAllDirectories)

не работает
...
Рейтинг: 0 / 0
17.07.2020, 12:32
    #39980876
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
X11А как эта функция будет "выглядеть" для Линукса?
Как ее переписать для Линукса?

Не надо никак переписывать. SysUtils под линухом полностью функционален "как есть".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.07.2020, 12:35
    #39980878
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
В общем, вот так получилось:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
uses System.IOUtils, System.Types;
....

const cFileMaskImages = '*.JPG;*.JPEG;*.BMP;*.PNG;*.GIF';


....
implementation

uses
  System.SysUtils, System.Masks, System.StrUtils;

function GetListDocs(Dir: String): TStringDynArray;
var
 Predicate: TDirectory.TFilterPredicate;
 MaskArray: TStringDynArray;
begin
  MaskArray := SplitString(cFileMaskImages, ';');

  Predicate :=
    function(const Path: string; const SearchRec: TSearchRec): Boolean
    var
      Mask: string;
    begin
      for Mask in MaskArray do
        if MatchesMask(SearchRec.Name, Mask) then
          exit(True);
      exit(False);
    end;


  result := TDirectory.GetFiles(dir, '*', TSearchOption.soAllDirectories, Predicate);
end;
...
Рейтинг: 0 / 0
20.07.2020, 10:21
    #39981674
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
X11
Fr0sT-Brutal
Эти вещи просто более модная обертка над все теми же функциями из SysUtils


судя по исходникам, - нет

Не знаю, как судишь исходники ты, но я вижу вот это
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class procedure TDirectory.WalkThroughDirectory(const Path, Pattern: string;
  const PreCallback, PostCallback: TDirectoryWalkProc;
  const Recursive: Boolean);
var
  SearchRec: TSearchRec;
  Match: Boolean;
  Stop: Boolean;
begin
  if FindFirst(TPath.DoCombine(Path, '*', False), faAnyFile, SearchRec) = 0 then // DO NOT LOCALIZE
  ...
...
Рейтинг: 0 / 0
22.07.2020, 11:49
    #39982616
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
Интересно, почему разработчики в TFile не добавили метод GetFileSize()?
...
Рейтинг: 0 / 0
22.07.2020, 11:49
    #39982617
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
X11
Интересно, почему разработчики в TFile не добавили FileSize()?
...
Рейтинг: 0 / 0
22.07.2020, 11:55
    #39982621
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
"Дорого"... Оставили на следующие релизы.

Может это поможет? http://docwiki.embarcadero.com/Libraries/Rio/en/System.IOUtils.TDirectory.TFilterPredicate
...
Рейтинг: 0 / 0
22.07.2020, 12:00
    #39982625
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
Сделал так, надеюсь и для Линукса в будущем прокатит
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function GetFileSize(const FileName: String): Int64;
var
  f: file of Byte;
begin
  try
    AssignFile(f, FileName);
    Reset(f);
    result := FileSize(f);
  finally
    CloseFile(f);
  end;
end;
...
Рейтинг: 0 / 0
22.07.2020, 12:07
    #39982628
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог TSearchRec, FindFirst, FindNext под Линукс
читаю комменты
http://www.malcolmgroves.com/blog/?p=447

ещё 10 лет назад просили добавить
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Аналог TSearchRec, FindFirst, FindNext под Линукс / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]