Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2021, 00:23   #1
ПростоОлег
Новичок
Джуниор
 
Регистрация: 28.08.2021
Сообщений: 3
Вопрос Получить список файлов в том же порядке что и в проводнике.

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

Для примера стандартный просмотрщик изображений windows при листании изображений показывает их именно в том порядке, в котором они отображаются в проводнике, учитывая выбранную сортировку файлов в папке. Мне нужно реализовать подобный функционал.

Я уже попробовал FindFirstFileEx и его флаги, а также посмотрел документацию Qt, но безрезультатно.

Надеюсь, кто-нибудь сможет что-нибудь подсказать.
ПростоОлег вне форума Ответить с цитированием
Старый 06.09.2021, 09:36   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

1. при помощи FindFirstFile получить вообще список файлов - массив имён name[i]. это у вас будет какой-то первый цикл.
2. для каждого файла в этом же цикле вы формируете массив данных (размер size[i], время создания time[i]...)
3. второй цикл - сортировка по выбранному параметру, скажем, по размеру size[i]. он вам выстроит все size от наименьшего до наибольшего. а дальше вы по индексам выводите имена - они как раз будут в нужном вам порядке.
--------------
тут муторная работа по сортировке....
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 06.09.2021, 21:00   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

вот, нашёл свою разработку.
Код:
//----- выводим файлы по заданной маске ----------------------------------------
procedure TForm1.PrintFile(Mask:string;Put:string);
var Name:string;
begin
    if(FindFirst(Put+Mask,faAnyFile,SR)=0)then//если файлы есть
    begin
       repeat
        Name:=SR.Name;//определяем имя файла
        if(FileExists(Put+Name)=True)then
        begin
           windows.SetFileAttributes(pChar(Put+Name),0);
           q:=q+1;//нумерация
           sps[q]:=Name;//заносим все имена в массив
           pos[q]:=Name;//заносим все имена в массив
           siz[q]:=IntToStr(SR.Size);//заносим все размеры в массив
           tim[q]:=IntToStr(SR.Time);//заносим время создания в массив
        end;
       until FindNext(SR)<>0;
    end;
    FindClose(SR);
end;
а дальше делай с ними, что заблагорассудится, хоть вверх ногами список делай, хоть ёлочкой, хоть лесенкой...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 07.09.2021, 14:02   #4
ПростоОлег
Новичок
Джуниор
 
Регистрация: 28.08.2021
Сообщений: 3
По умолчанию

Да, но собственно как узнать, какой сейчас установлен тип сортировки файлов в данной директории в самом проводнике? Ведь в проводнике для директории можно выбрать любую сортировку из предложенных (а их там не мало, когда заглядываешь в раздел «Подробнее..»). Как моему приложению узнать, какая сортировка сейчас выбрана?
ПростоОлег вне форума Ответить с цитированием
Старый 08.09.2021, 08:36   #5
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

скорее всего, где-то в реестре прописан параметр, который меняется в зависимости от вашего проводника. надо искать в литературе для начала...
---------
если поиск ничего не даст. то я бы заморочился и сделал снимок реестра. первый - для вида ТАБЛИЦА, второй - для вида ПЛИТКА (ну, или какие там ещё есть виды отображения файлов). и уж посимвольно сравнил бы программным путём... авось, даст какие-то изменения - вот там и зарыта собака....
------------
есть смутные подозрения, что раз отображение скрытых файлов в ключе
HKEY_CURRENT_USER\Software\Microsof t\Windows\CurrentVersion\Explorer\A dvanced]

;Показывать скрытые файлы и папки
"Hidden"=dword:00000001

то и вид папки тоже может быть где-то в этой ветви реестра. покопайтесь. ничего страшного не произойдёт. в винду переустанавливать, если что, мы все уже умеем на раз-два...
-------------
ещё с просторов Инета:
Windows Registry Editor Version 5.00

; Сброс вида папок
[-HKEY_CURRENT_USER\Software\Microsof t\Windows\ShellNoRoam\BagMRU]
[-HKEY_CURRENT_USER\Software\Microsof t\Windows\ShellNoRoam\Bags]
[-HKEY_CURRENT_USER\Software\Microsof t\Windows\Shell\BagMRU]
[-HKEY_CURRENT_USER\Software\Microsof t\Windows\Shell\Bags]

[-HKEY_CURRENT_USER\Software\Classes\ Local Settings\Software\Microsoft\Windows \Shell\BagMRU]
[-HKEY_CURRENT_USER\Software\Classes\ Local Settings\Software\Microsoft\Windows \Shell\Bags]

; Отключение автоматического присвоения шаблонов для папок
[HKEY_CURRENT_USER\Software\Classes\ Local Settings\Software\Microsoft\Windows \Shell\Bags\AllFolders\Shell]
"FolderType"="NotSpecified"

; Увеличение кэша памяти для вида папок
[HKEY_CURRENT_USER\Software\Classes\ Local Settings\Software\Microsoft\Windows \Shell]
"BagMRU Size"=dword:00004e20

; Запоминание параметров отображения каждой папки
[HKEY_CURRENT_USER\Software\Microsof t\Windows\CurrentVersion\Policies\E xplorer]
"NoSaveSettings"=dword:00000000
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 08.09.2021 в 08:44.
NetSpace вне форума Ответить с цитированием
Старый 09.09.2021, 12:06   #6
ПростоОлег
Новичок
Джуниор
 
Регистрация: 28.08.2021
Сообщений: 3
По умолчанию

Идея с разбором реестра интересна, но мне кажется, что должен быть простой способ реализовать мою задачу.

После долгих поисков, наткнулся на метод IFolderView2::GetSortColumns. Если я правильно понял, он как раз должен возвращать тип сортировки в директории. Правда, как заставить его работать я пока что не разобрался. Но даже если я смогу получить текущий тип сортировки, я не думаю, что будет хорошей идеей пытаться самому реализовывать каждый тип сортировки, ведь их там не мало. Я все же надеюсь, что есть простой способ получить уже отсортированный список файлов.

Есть надежда, что можно использовать для этого метод IShellFolder::EnumObjects, но это всего лишь предположение, да и как работает этот метод, я тоже пока что не разобрался.

Если кто-то сможет подсказать нужный мне метод или привести примеры использования упомянутых выше функций, я буду очень благодарен.
ПростоОлег вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать иерархический список всех каталогов и файлов, как в проводнике Windows George87 Microsoft Office Excel 6 13.07.2017 16:13
Получить список файлов с сервера FTP Qt C++ _PROGRAMM_ Помощь студентам 1 07.03.2014 16:39
Получить список файлов в папке romanzi Общие вопросы Delphi 7 21.08.2013 08:19
Получить список имен файлов на сайте syserg Работа с сетью в Delphi 8 28.03.2010 14:01
Получить список файлов и папок. gusluk Общие вопросы Delphi 3 10.03.2009 12:49