powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Аналог TSearchRec, FindFirst, FindNext под Линукс
42 сообщений из 42, показаны все 2 страниц
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39980771
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция подсчета количества файлов в паке с подпапками для 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
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39980773
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В линуксах не работает System.IOUtils?
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39980777
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю, я ещё ни разу не писал под линукс, примеров не нашёл.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39980783
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинаю припоминать....
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Standard_RTL_Path_Functions_across_the_Supported_Target_Platforms

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


а ты ищи примеры работы с классами из System.IOUtils - они мультиплатфоменные все.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39980792
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел такое
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
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39980805
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А откуда ты взял, что в Линуксе это не будет работать?
Код: 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
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39980808
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Ни откуда не взял, просто предположил.
2. Модуль System.IOUtils более новый, т.е. продвинутый, современный. Думаю, что его более правильно использовать.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39980810
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос по маске
Код: pascal
1.
GetFiles(dir, '*.JPEG *.BMP *.PNG *.GIF', TSearchOption.soAllDirectories)



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


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


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

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

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

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


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

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


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


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


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

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

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

Код: 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
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39981674
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982616
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, почему разработчики в TFile не добавили метод GetFileSize()?
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982617
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Интересно, почему разработчики в TFile не добавили FileSize()?
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982621
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Дорого"... Оставили на следующие релизы.

Может это поможет? http://docwiki.embarcadero.com/Libraries/Rio/en/System.IOUtils.TDirectory.TFilterPredicate
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982625
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так, надеюсь и для Линукса в будущем прокатит
Код: 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
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982628
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читаю комменты
http://www.malcolmgroves.com/blog/?p=447

ещё 10 лет назад просили добавить
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982649
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Сделал так, надеюсь и для Линукса в будущем прокатит
Код: 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;


Надежнее открыть поток "для чтения" у самого TFile. Там и размер будет.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982659
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если поток, то вопрос другой.
Картинки уже загружены в "карусель" для прокрутки. Т.е. они уже есть в памяти. Но ни TPicture, ни TGraphic не имеют свойства Size или чего-то такого.
Я пытался скопировать TPicture в TMemoryStream и получить его размер и тут засада. Для jpg вроде размер совпадает с размером, который показывает Проводник Винды, а вот для PNG размер TMemoryStream из TPicture примерно раз в 10 меньше. Т.е. для PNG размер файла 374кб, а размер TMemoryStream из TPicture - 32кб.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982666
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

зачем узнавать размер файла для уже загруженной картинки? Почему во время загрузки этот момент не уточнить?
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982676
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Я ручками НИЧЕГО не загружаю, т.к. это делает стандартный метод LoadFtomFile().
2. Можно, конечно, самому ручками загружать через TFileStream. Но на момент загрузки размер не нужен. Характеристики картинки нужно показать только по нажатию на кнопку. При загрузке, получается, нужно создавать какой-то отдельный массив рекордов для хранения размеров и идентификаторов картинок? Но пользователь может удалять/добавлять картинки в карусель, тогда придется и этот массив редактировать. Уж слишком сложно получается и в памяти придется постоянно держать, возможно и никому не нужный массив рекордов. Почему "возможно и никому не нужный"? Потому что пользователь по своему желанию смотрит характеристики картинки.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982683
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под потоком я имел в виду у TFile
Код: pascal
1.
class function OpenRead(const Path: string): TFileStream; static;


А у потока есть свойство Size
http://docwiki.embarcadero.com/Libraries/Rio/en/System.Classes.TFileStream_Properties

Такой подход выглядит более пригодным для разных платформ.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982684
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо:

Код: pascal
1.
 result := TFile.OpenRead(FileName).Size
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982692
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
спасибо:

Код: pascal
1.
 result := TFile.OpenRead(FileName).Size


А Free?
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982699
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function GetFileSize(const FileName: String): Int64;
var
 FileStream: TFileStream;
begin
  if TFile.Exists(FileName) then
  try
    FileStream := TFile.OpenRead(FileName);
    result := FileStream.Size
  finally
    FileStream.Free;
  end
  else
    result := -1;

end;
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982700
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
А Free?


странно, вот у меня в приложении включено
Код: pascal
1.
ReportMemoryLeaksOnShutdown := True;



но по завершении приложения тишина
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982721
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FileSeek еще можно применить. Либо реализовать самому, выдрав текст функции _FileSize из System (которая почему-то сделана приватной)
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982806
misha mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Сделал так, надеюсь и для Линукса в будущем прокатит
А если файл монопольно занят другим процессом, то его размер нам уже не нужен?
Размер файла есть в оглавлении и извлекается теми же FindFirst/FindNext без открытия даже для наглухо заблокированных файлов.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39982916
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это, конечно, круто и правильно, но это слишком сложно для меня

скажите, это оно?
https://delphidabbler.github.io/delphi-tips/tips/201.html
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39983082
misha mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Я ручками НИЧЕГО не загружаю, т.к. это делает стандартный метод LoadFtomFile().
Предлагаю вместо LoadFromFile делать сначала TFileStream.Create, а потом LoadFromStream. А между этими действиями прочитать TFileStream.Size. Так и руками ничего считывать не нужно, и размер файла получите из первых рук.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39983208
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Это, конечно, круто и правильно, но это слишком сложно для меня

скажите, это оно?
https://delphidabbler.github.io/delphi-tips/tips/201.html


Код: pascal
1.
2.
3.
4.
5.
6.
function ImageType(Fname: String): Smallint;
  if ImgExt = '.BMP' then
    Itype := 1
  else
  if (ImgExt = '.JPEG') or (ImgExt='.JPG') then
    Itype := 2



Ну во всяком случае функция определения типа изображения по расширению файла - от лукавого. Где еще .jfif, .jpe расширения (в ее контексте)? Лучше читать сигнатуры.
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39983209
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по идее, хватит только jpg, т.к. почти все фотокамеры на смарфтонах делают фото в формате jpg
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39983686
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как интересно от размера файла перетекли к размерам изображения при заявленных в топике Find*
...
Рейтинг: 0 / 0
Аналог TSearchRec, FindFirst, FindNext под Линукс
    #39984017
misha mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal, то-ли еще бывает!
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Аналог TSearchRec, FindFirst, FindNext под Линукс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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