Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
27:04:2008, 13:39
|
|
Новенький ![]() Группа: Программист Сообщений: 8 Регистрация: 17:03:2008 Пользователь №: 15 943 Репутация: 0
|
У меня в программе пользователь выберает директорию и все файла добавляются в Memo.
Хочу сделать сортировочку. Тоесть чтобы можно было сортировать по названию, расширению, размеру. Подскажите как это сделать? |
|
Сообщение
#1
|
|
![]() |
|
|
28:04:2008, 05:44
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Написать соответствующий код, или нет?
|
|
Сообщение
#2
|
|
|
|
28:04:2008, 10:39
|
|
Новенький ![]() Группа: Программист Сообщений: 8 Регистрация: 17:03:2008 Пользователь №: 15 943 Репутация: 0
|
Получаю список файлов так:
Код 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; Можно было бы конечно записать список файлов в массив и отсортировать. Просто интересно, можно ли сделать это по другому. |
|
Сообщение
#3
|
|
|
|
28:04:2008, 11:28
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Закидывайте данные в TStringList, его сорттируйте, а на выходе Assign в destination. Так вот первое что пришло.
|
|
Сообщение
#4
|
|
|
|
28:04:2008, 14:00
|
|
Новенький ![]() Группа: Программист Сообщений: 8 Регистрация: 17:03:2008 Пользователь №: 15 943 Репутация: 0
|
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 у меня есессно все сбивается. Думал может есть какая ф-я для сортировки при поиске файлов... |
|
Сообщение
#5
|
|
|
|
28:04:2008, 14:15
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Почему m позже v ?
|
|
Сообщение
#6
|
|
|
|
28:04:2008, 14:38
|
|
Новенький ![]() Группа: Программист Сообщений: 8 Регистрация: 17:03:2008 Пользователь №: 15 943 Репутация: 0
|
Цитата Почему m позже v ? Да это я так для примера привел. |
|
Сообщение
#7
|
|
|
|
28:04:2008, 15:05
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Вы для примера (неправильного), условия меняете от топика к топику, а люди при этом думают, стараются помочь ... оч. некрасиво.
|
|
Сообщение
#8
|
|
|
|
28:04:2008, 15:13
|
|
Новенький ![]() Группа: Программист Сообщений: 8 Регистрация: 17:03:2008 Пользователь №: 15 943 Репутация: 0
|
да я просто пример привел как я получаю список файлов.
Тоесть в начале название папки потом файлы потом опять название папки. и вопрос просто как отсортировать все это и чтобы сохранилась структура. Это Вы что то путаете. |
|
Сообщение
#9
|
|
|
|
28:04:2008, 15:41
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Это Вы что то путаете. Я ничего не путаю, я смотрю на первый пост и сравниваю с последующими, и вижу что условия меняются постоянно, а это не хорошо.Надо вам учиться правильно формулировать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml |
|
Сообщение
#10
|
|
|
|
28:04:2008, 16:07
|
|
Новенький ![]() Группа: Программист Сообщений: 8 Регистрация: 17:03:2008 Пользователь №: 15 943 Репутация: 0
|
Вопрос закрыт. Сделал.
Цитата я смотрю на первый пост и сравниваю с последующими читать надо, а не смотреть. В 5 сообщение я расписал подробно что хотел. |
|
Сообщение
#11
|
|
|
|
28:04:2008, 16:40
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Нафик читать всякую ерунду.
|
|
Сообщение
#12
|
|
![]() |
|
Текстовая версия | Сейчас: 17:05:2008 - 05:11 |