• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Сортировка файлов

  • Автор темы destroy
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

destroy

У меня в программе пользователь выберает директорию и все файла добавляются в Memo.
Хочу сделать сортировочку. Тоесть чтобы можно было сортировать по названию, расширению, размеру.
Подскажите как это сделать?
 
D

destroy

Получаю список файлов так:

Код:
procedure FindFilesByMask(List :tStrings; var DirCount :Integer; const DirName, Mask :String; SubDir: Boolean = True);

procedure ScanDirs(const DirName :String);
var
h  :tHandle;
wfd :tWin32FindData;
sfo :string;
n :integer;
SearchRec2 :TSearchRec;



begin
Inc(DirCount);

h := Windows.FindFirstFile(PChar(DirName+Mask), wfd);

end;

try
if h <> INVALID_HANDLE_VALUE then begin
repeat
if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
List.Add(DirName+wfd.cFileName);
until not Windows.FindNextFile(h,wfd);
end;

case GetLastError of
ERROR_NO_MORE_FILES,	// больше нет файлов и каталогов удовлетворяющих маске (но были)
ERROR_FILE_NOT_FOUND,  // вообще нет файлов и каталогов удовлетворяющих маске
ERROR_SHARING_VIOLATION // возникает во время создания каталога (уже создан но еще недоступен)
:; // ничего не делаем, все Ok
else // все остальные ошибки
raise Exception.CreateFmt('Ошибка просмотра каталога "%s": %s',[DirName,SysErrorMessage(GetLastError)]);
end;
finally
if h <> INVALID_HANDLE_VALUE then Windows.FindClose(h);
end;

// Теперь рекрсивно просмотрим подкаталоги
if not SubDir then exit;
h := Windows.FindFirstFile(PChar(DirName+'*.*'), wfd);
try
if h <> INVALID_HANDLE_VALUE then begin

repeat
if  ((wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0)
and (wfd.cFileName <> String('.'))
and (wfd.cFileName <> '..')		  then
ScanDirs(IncludeTrailingPathDelimiter(DirName+wfd.cFileName));
until not Windows.FindNextFile(h,wfd);
end;

case GetLastError of
ERROR_NO_MORE_FILES,	// больше нет файлов и каталогов удовлетворяющих маске (но были)
ERROR_FILE_NOT_FOUND,  // вообще нет файлов и каталогов удовлетворяющих маске
ERROR_SHARING_VIOLATION // возникает во время создания каталога (уже создан но еще недоступен)
:; // ничего не делаем, все Ok
else // все остальные ошибки
raise Exception.CreateFmt('Ошибка просмотра каталога "%s": %s',[DirName,SysErrorMessage(GetLastError)]);
end;
finally
if h <> INVALID_HANDLE_VALUE then Windows.FindClose(h);
end;
end;

begin // FindFilesByMask
ScanDirs(IncludeTrailingPathDelimiter(DirName));
end;

Можно было бы конечно записать список файлов в массив и отсортировать.
Просто интересно, можно ли сделать это по другому.
 
D

destroy

sax_ol, я так тоже делал.

Но все ни так просто у меня.
Код который я привел не совсем полный так сказать...

Принцип такой:
Если найдена папка, название ее добавляется в memo
И после того как все имена файлов, которые находятся в этой папке добавлены в memo,
добавляется опять строчка с название этой папки.

Например:

video
c:\video\1.avi
c:\video\2.avi
c:\video\3.avi
video

music
c:\music\1.mp3
c:\music\2.mp3
...

А когда я закидываю в TStringList
у меня есессно все сбивается.

Думал может есть какая ф-я для сортировки при поиске файлов...
 
D

destroy

да я просто пример привел как я получаю список файлов.
Тоесть в начале название папки потом файлы потом опять название папки.
и вопрос просто как отсортировать все это и чтобы сохранилась структура.

Это Вы что то путаете.
 
D

destroy

Вопрос закрыт. Сделал.

я смотрю на первый пост и сравниваю с последующими
читать надо, а не смотреть.

В 5 сообщение я расписал подробно что хотел.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!