![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Всем доброго времени суток.
Возник вопрос: как изменить порядок следования фалов в файловой системе в одном каталоге. Предыстория: Есть некоторые mp3 плееры, которые умеют воспроизводить контент папки только в той последовательности, в которой файлы были записаны в эту папку без какой-либо сортировки по названию файла. Задача: написать функцию/программу, которая будет уметь отсортировать файлы физически в заданной папке по имени или в случайном порядке... Придуман следующий алгортим (пока для "перемешивания" файлов в папке):
Алгоритм на 99.99% срабатывает только в том случае, если происходит перенос с переименованием файла с учетом НПП в имени файла. Т.е. порядок копирования учитывается только для FAT, для NTFS похоже существует некий свой алгоритм сортировки "по умолчанию"... Опытные люди, просветите, прав ли я в том, что порядок копирования имеет значение только для FAT(32)? Пример кода, реализующего алгоритм (DXE):
Код является "вытяжкой" из класса-потока и использует самописную функцию-обертку над SHFileOperation (CU_ShFlOp). -------------------- There are always someone smarter than you... |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Keeper89, ну да... вот такие они загадочные.
Такой порядок файлов, к примеру, показывает тотал коммандер, когда выбрана сортировка "Без сортировки". Т.е. для FAT это порой "в перемешку", и на деле в том порядке, в каком в эту папку были скопированы/перенесены файлы. И самая засада слушать аудиокниги, которые "нечаянно" были записаны таким образом. То 2 глава 5й части, а следом 10 глава 2 части... -------------------- There are always someone smarter than you... |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Вообще в NTFS структура каталога оптимизирована для быстрого нахождения файла. Поэтому поиск через FindFirstFile/FindNextFile ,будет выдавать файлы согласно этой оптимизации.
Сейчас ради интереса проверил - возвращает отсортированные по имени, если файл переименовать - порядок меняется. Но половина из них все же сортируют файлы с короткими именами (8+3). И на всех из них (почти?) FAT. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
А что если не копировать файлы в новую папку, а побайтно читать и писать в новый? После, старый удалить.
|
|||
|
||||
| Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 5 Всего: 50 |
MetalFan, уверен, что ты это видел, но все-таки:
|
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Да вот как раз имею парочку дешевых китайских плееров из второй половины, которые читают файлы в том порядке, в каком они есть. Плеер на столько примитивен, что имеет только три кнопки и 6 функций: плей/пауз/некст/прев/громче/тише. И не умеет, зараза, читать файлы ни рандомно ни по алфавиту. Вот и заморочился такой программкой. А читать/писать файлы по-байтам, имхо, еще более накладно, чем как сейчас сделано. Папку в 4Гб и почти 400 файлов алгортим обрабатывает не дольше 2-3х минут. В идеале было бы вызывать какую-нибудь "хитрую" системную функцию, которая отсортирует/перемешает файлы физически так, как надо без доп.переноса в другую папку.... Qu1nt, Представь себе, если и читал, то совершенно из головы вылетело. Хотя я к такому же заключению и так пришел экспериментально... -------------------- There are always someone smarter than you... |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
MetalFan, посмотри вот это
Это сообщение отредактировал(а) Keeper89 - 25.4.2012, 02:21 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Keeper89, ой спасибо... особенно за первую ссылку.
я что-то сам не додумался погуглить... Попробую реализовать то же самое под делфю... -------------------- There are always someone smarter than you... |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
MetalFan, а зачем реализовывать если там уже есть готовое? Это часть какой-то утилиты?
|
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Keeper89, да понятно, что реализовано, но на сях...
а хочется свою утилиту и на делфе) И более продвинутую... -------------------- There are always someone smarter than you... |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Особо не вчитывался, но думаю логика совпадает - переставить местами заголовки файлов. Когда то писал нечто подобное, только менял местами заголовки разделов. А для файлов/каталогов - делал просто читалку(должна была выводить список файлов). Могу поискать код. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Ну если будет время и вдруг найдется код, то я конечно же буду не против на него посмотреть)
-------------------- There are always someone smarter than you... |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Найти - нашел. Зае...ся переводить в читаемый вид.
А еще застопорился на int64 - пока нашел в чем дело... - (часть каталогов открывалась, а часть нет) уже дошло до того что начал искать FAT сжатие.
Для сохранения отсортированного каталога в TFATclass1 нужно добавить добавил простую функцию SaveSortedFolder принимающую в качестве параметра TFileHeader TContentFATFolder Это сообщение отредактировал(а) Чучмек - 10.5.2012, 03:43 Присоединённый файл ( Кол-во скачиваний: 5 )
Unit2.pas 23,40 Kb-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Чучмек, ого, спасибо, покурю на досуге. Это полностью самописное или откуда-то выбранное?
-------------------- There are always someone smarter than you... |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Только с описания FAT.
Сохранение каталога нужно переписать. Свободное место в каталоге нужно забивать нулями до конца, а не ограничиваться одной завершающей записью. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |