Эмуляция файлов
От: Alekzander Россия  
Дата: 08.02.25 20:52
Оценка: -2 :))
Кто-нибудь делал такое?

Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.

Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.
Re: Эмуляция файлов
От: cppguard  
Дата: 08.02.25 21:09
Оценка: 9 (1)
Здравствуйте, Alekzander, Вы писали:

A>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.


Nextcloud реализует такое. Если поставить "использовать виртуальную ФС" в настройках, то в проводнике будут отображаться файлы из облака, но физически они будут загружаться только в момент первого чтения. Исходники открыты. А вообще — https://learn.microsoft.com/en-us/windows/win32/projfs/projected-file-system первая ссылка в выдаче, вы даже не пытались
Re: Эмуляция файлов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.02.25 21:12
Оценка: 9 (1)
Здравствуйте, Alekzander, Вы писали:

A>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.


A>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.


Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны
Маньяк Робокряк колесит по городу
Re[2]: Эмуляция файлов
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.02.25 21:21
Оценка:
Здравствуйте, Marty, Вы писали:

M>Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны


Но только они папки только для оболочки и для программ, которые для доступа к файловой системе используют ее API. А для тех, кто использует системный API, их нет.
Re[2]: Эмуляция файлов
От: Alekzander Россия  
Дата: 08.02.25 21:36
Оценка:
Здравствуйте, cppguard, Вы писали:

C>вы даже не пытались


Виновен, ваша честь. Хотел сначала послушать про возможные подходы. ФС, или, может, какой-то механизм, на который опирается реализация subst и обратная ей команда (название забыл), или драйвер, или что-то ещё.
Re[3]: Эмуляция файлов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.02.25 21:39
Оценка:
Здравствуйте, Pzz, Вы писали:


M>>Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны


Pzz>Но только они папки только для оболочки и для программ, которые для доступа к файловой системе используют ее API. А для тех, кто использует системный API, их нет.


Имхо ты не прав, но 100%-но утверждать не буду. Но вроде бы АПИ само там подстановки делает, как надо. Ну это АПИ юзерского уровня, если ядрёное — то там да, никаких подстановок точно не будет
Маньяк Робокряк колесит по городу
Re[2]: Эмуляция файлов
От: Alekzander Россия  
Дата: 08.02.25 21:43
Оценка:
Здравствуйте, Marty, Вы писали:

A>>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.


A>>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.


M>Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны


У таких папок, сколько мне помнится, гуид, а надо путь. Что прописать, например, в строке "Путь к изображениям" в виндовом реестре, откуда explorer берёт новую картинку для обоев по таймауту?
Re[4]: Эмуляция файлов
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.02.25 21:56
Оценка:
Здравствуйте, Marty, Вы писали:

Pzz>>Но только они папки только для оболочки и для программ, которые для доступа к файловой системе используют ее API. А для тех, кто использует системный API, их нет.


M>Имхо ты не прав, но 100%-но утверждать не буду. Но вроде бы АПИ само там подстановки делает, как надо. Ну это АПИ юзерского уровня, если ядрёное — то там да, никаких подстановок точно не будет


CreateFile ничего не знает про шеловские папки.
Re[3]: Эмуляция файлов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.02.25 21:58
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>>>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.


A>>>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.


M>>Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны


A>У таких папок, сколько мне помнится, гуид, а надо путь. Что прописать, например, в строке "Путь к изображениям" в виндовом реестре, откуда explorer берёт новую картинку для обоев по таймауту?


Это все не важно. Важно то, что стороннее приложение может открыть диалог открытия файлов, там среди прочего будет "Мои Документы\Моё супер-пупер приложение", там пользователь может выбрать файл, а приложению будет отдан реальный путь к файл в файловой системе.

Да, я соврал в ответе Pzz, CreateFile этим не занимается, этим шелл апи занимается, через которое, в тч, отображается диалог открытия файла

Но, допустим, я в проводнике перехожу в "Документы", там в FFOutput. Кликаю на адресной строке, там — "копировать", в буфер попадает "C:\Users\USER\Documents\FFOutput"

С этим можно жить, кучи софта как-то живут
Маньяк Робокряк колесит по городу
Re: Эмуляция файлов
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.02.25 22:00
Оценка: 9 (1) +1
Здравствуйте, Alekzander, Вы писали:

A>Кто-нибудь делал такое?


В линухе это легко и непринужденно делается с помощью fuse.

Вроде как есть порт под венду (https://github.com/winfsp/winfsp), х.з., насколько работоспособный.

A>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.


А не проще ли эти файлы просто вывалить во временную директорию? Диски нонече быстрые и дешевые, так что если картинок там не терабайт, это может оказаться вполне годным вариантом...
Re[3]: Эмуляция файлов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.02.25 22:01
Оценка:
Здравствуйте, Alekzander, Вы писали:

C>>вы даже не пытались


A>Виновен, ваша честь. Хотел сначала послушать про возможные подходы. ФС, или, может, какой-то механизм, на который опирается реализация subst и обратная ей команда (название забыл), или драйвер, или что-то ещё.


Ну, точки монтирования и хард/софт линки тоже никто не отменял, но тебе таки свои файлы где-то надо хранить где-то на NTFS, но можно подставлять почти куда хочешь — хард линки только в рамках тома, софт линки — где угодго.

Вот чего я так и не понял, так это почему в винде по умолчанию хард линки разрешены, а софт линки запрещены
Маньяк Робокряк колесит по городу
Re[5]: Эмуляция файлов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.02.25 22:04
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>CreateFile ничего не знает про шеловские папки.


Да, я наврал, этим занимаются функции, которые показывают диалоги открытия/сохранения ффайла и прочего — они в приложуху отдают имя файла в файловой системе, а если получают, то пытаются отобразить его на виртуальную папку, и если удалось, то показывают в диалоге виртуальную папку
Маньяк Робокряк колесит по городу
Re[4]: Эмуляция файлов
От: m2user  
Дата: 08.02.25 22:24
Оценка:
M>Вот чего я так и не понял, так это почему в винде по умолчанию хард линки разрешены, а софт линки запрещены

Запрещены нелокальные симлинки (и то не все).

C:\>fsutil behavior query symlinkevaluation
Local to local symbolic links are enabled
Local to remote symbolic links are enabled.
Remote to local symbolic links are disabled.
Remote to Remote symbolic links are disabled.
Re[5]: Эмуляция файлов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.02.25 22:27
Оценка:
Здравствуйте, m2user, Вы писали:

M>>Вот чего я так и не понял, так это почему в винде по умолчанию хард линки разрешены, а софт линки запрещены


M>Запрещены нелокальные симлинки (и то не все).


M>
M>C:\>fsutil behavior query symlinkevaluation
M>Local to local symbolic links are enabled
M>Local to remote symbolic links are enabled.
M>Remote to local symbolic links are disabled.
M>Remote to Remote symbolic links are disabled.
M>


Что такое — нелокальные симлинки?

mklink не создаёт никакие софт линки без специального разрешения для этого. Может, через АПИ это по другому, я глубоко не копал
Маньяк Робокряк колесит по городу
Re: Эмуляция файлов
От: m2user  
Дата: 08.02.25 22:49
Оценка: 9 (1)
A>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.

Как вариант — запускать локальный ftp-сервер. Windows Explorer хорошо умеет с ftp работать.

Потестил ещё: при открытии файла через winexplorer на редактирование он копируется с ftp во временные файлы пользователя.
Отредактировано 09.02.2025 0:28 m2user . Предыдущая версия .
Re[6]: Эмуляция файлов
От: m2user  
Дата: 08.02.25 23:16
Оценка:
M>Что такое — нелокальные симлинки?

симлинки, у которых хотя бы одна из сторон (сам симлинк, либо место куда он указывает) на сетевом каталоге.
Но эта настройка про поведение при переходе по симлинку, а не про создание.

M>mklink не создаёт никакие софт линки без специального разрешения для этого. Может, через АПИ это по другому, я глубоко не копал


Да, ты прав. Политика "Create Symbolic Links" по умолчанию дает права на создание только группе Администраторов.
Но можно создавать junction point (mklink /j), для них достаточно прав на запись в каталог.
Re[7]: Эмуляция файлов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.02.25 23:37
Оценка:
Здравствуйте, m2user, Вы писали:

M>>mklink не создаёт никакие софт линки без специального разрешения для этого. Может, через АПИ это по другому, я глубоко не копал


M>Да, ты прав. Политика "Create Symbolic Links" по умолчанию дает права на создание только группе Администраторов.

M>Но можно создавать junction point (mklink /j), для них достаточно прав на запись в каталог.

junction point — это врде как про каталоги. А я хотел, чтобы условно сделать симлинк на C:\qt5.12\toolchain\gcc\bin\gcc.exe по пути C:\MyBins\gcc7.exe, и при запуске C:\MyBins\gcc7.exe у него было окружение из C:\qt5.12\toolchain\gcc\bin

Не хочу добавлять всё в пути, но хочу иметь доступ ко всему нужному, добавив в PATH единственный путь C:\MyBins, и присовывая туда то, что нужно.

Не могу понять, какого хрена в винде эта возможность по умолчанию заблокирована
Маньяк Робокряк колесит по городу
Re: Эмуляция файлов
От: Qulac Россия  
Дата: 09.02.25 05:34
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Кто-нибудь делал такое?


A>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.


A>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мул ьтиплатформенно, но винда нужна в первую очередь.


В paint image можно скопипастить если что.
Программа – это мысли спрессованные в код
Re: Эмуляция файлов
От: Слава  
Дата: 09.02.25 07:49
Оценка: 9 (1)
Здравствуйте, Alekzander, Вы писали:

A>Кто-нибудь делал такое?


A>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.


A>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.


Это будет очень тяжело. В винде есть т.н. "reparse points", на них основаны и симлинки. Для работы с этим вам придётся писать драйвер файловой системы, да не простой, а для Installable File System.

Если я правильно помню, монтирование файлов .wim в некую папку опирается на этот механизм, вы получаете иерархию из кучи файлов и папок, папки настоящие, а файлы указывают на внутренности определённого файла wim.

Ещё недавно я наткнулся на неведомый механизм app alias, это когда у вас есть как бы исполняемые файлы в C:\Users\Username\AppData\Local\Microsoft\WindowsApps\, а на самом деле это особого вида ссылки, например wsl.exe ссылается на C:\Program Files\WindowsApps\MicrosoftCorporationII.WindowsSubsystemForLinux_2.4.10.0_x64__8wekyb3d8bbwe\wsl.exe, но вероятно это сделано только для определённых задач и вам не пригодится.
Re[4]: Эмуляция файлов
От: Alekzander Россия  
Дата: 09.02.25 08:39
Оценка:
Здравствуйте, Marty, Вы писали:

A>>У таких папок, сколько мне помнится, гуид, а надо путь. Что прописать, например, в строке "Путь к изображениям" в виндовом реестре, откуда explorer берёт новую картинку для обоев по таймауту?


M>Это все не важно.


Как это "не важно", когда это часть юз-кейса? Диалога открытия файла (как и Explorer'а в любом виде) может вообще не быть, а путь к виртуальному файлу прописывается где-нибудь в конфиге.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.