Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.
Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.
Здравствуйте, Alekzander, Вы писали:
A>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.
Nextcloud реализует такое. Если поставить "использовать виртуальную ФС" в настройках, то в проводнике будут отображаться файлы из облака, но физически они будут загружаться только в момент первого чтения. Исходники открыты. А вообще — https://learn.microsoft.com/en-us/windows/win32/projfs/projected-file-system первая ссылка в выдаче, вы даже не пытались
Здравствуйте, Alekzander, Вы писали:
A>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.
A>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.
Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны
Здравствуйте, Marty, Вы писали:
M>Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны
Но только они папки только для оболочки и для программ, которые для доступа к файловой системе используют ее API. А для тех, кто использует системный API, их нет.
Здравствуйте, cppguard, Вы писали:
C>вы даже не пытались
Виновен, ваша честь. Хотел сначала послушать про возможные подходы. ФС, или, может, какой-то механизм, на который опирается реализация subst и обратная ей команда (название забыл), или драйвер, или что-то ещё.
M>>Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны
Pzz>Но только они папки только для оболочки и для программ, которые для доступа к файловой системе используют ее API. А для тех, кто использует системный API, их нет.
Имхо ты не прав, но 100%-но утверждать не буду. Но вроде бы АПИ само там подстановки делает, как надо. Ну это АПИ юзерского уровня, если ядрёное — то там да, никаких подстановок точно не будет
Здравствуйте, Marty, Вы писали:
A>>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.
A>>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.
M>Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны
У таких папок, сколько мне помнится, гуид, а надо путь. Что прописать, например, в строке "Путь к изображениям" в виндовом реестре, откуда explorer берёт новую картинку для обоев по таймауту?
Здравствуйте, Marty, Вы писали:
Pzz>>Но только они папки только для оболочки и для программ, которые для доступа к файловой системе используют ее API. А для тех, кто использует системный API, их нет.
M>Имхо ты не прав, но 100%-но утверждать не буду. Но вроде бы АПИ само там подстановки делает, как надо. Ну это АПИ юзерского уровня, если ядрёное — то там да, никаких подстановок точно не будет
Здравствуйте, Alekzander, Вы писали:
A>>>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.
A>>>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мультиплатформенно, но винда нужна в первую очередь.
M>>Представится файлом — хз, а папками — это расширения оболочки могут, все вот эти "Мои Документы" так и сделаны
A>У таких папок, сколько мне помнится, гуид, а надо путь. Что прописать, например, в строке "Путь к изображениям" в виндовом реестре, откуда explorer берёт новую картинку для обоев по таймауту?
Это все не важно. Важно то, что стороннее приложение может открыть диалог открытия файлов, там среди прочего будет "Мои Документы\Моё супер-пупер приложение", там пользователь может выбрать файл, а приложению будет отдан реальный путь к файл в файловой системе.
Да, я соврал в ответе Pzz, CreateFile этим не занимается, этим шелл апи занимается, через которое, в тч, отображается диалог открытия файла
Но, допустим, я в проводнике перехожу в "Документы", там в FFOutput. Кликаю на адресной строке, там — "копировать", в буфер попадает "C:\Users\USER\Documents\FFOutput"
Здравствуйте, Alekzander, Вы писали:
A>Кто-нибудь делал такое?
В линухе это легко и непринужденно делается с помощью fuse.
Вроде как есть порт под венду (https://github.com/winfsp/winfsp), х.з., насколько работоспособный.
A>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.
А не проще ли эти файлы просто вывалить во временную директорию? Диски нонече быстрые и дешевые, так что если картинок там не терабайт, это может оказаться вполне годным вариантом...
Здравствуйте, Alekzander, Вы писали:
C>>вы даже не пытались
A>Виновен, ваша честь. Хотел сначала послушать про возможные подходы. ФС, или, может, какой-то механизм, на который опирается реализация subst и обратная ей команда (название забыл), или драйвер, или что-то ещё.
Ну, точки монтирования и хард/софт линки тоже никто не отменял, но тебе таки свои файлы где-то надо хранить где-то на NTFS, но можно подставлять почти куда хочешь — хард линки только в рамках тома, софт линки — где угодго.
Вот чего я так и не понял, так это почему в винде по умолчанию хард линки разрешены, а софт линки запрещены
Здравствуйте, Pzz, Вы писали:
Pzz>CreateFile ничего не знает про шеловские папки.
Да, я наврал, этим занимаются функции, которые показывают диалоги открытия/сохранения ффайла и прочего — они в приложуху отдают имя файла в файловой системе, а если получают, то пытаются отобразить его на виртуальную папку, и если удалось, то показывают в диалоге виртуальную папку
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.
Здравствуйте, 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 не создаёт никакие софт линки без специального разрешения для этого. Может, через АПИ это по другому, я глубоко не копал
симлинки, у которых хотя бы одна из сторон (сам симлинк, либо место куда он указывает) на сетевом каталоге.
Но эта настройка про поведение при переходе по симлинку, а не про создание.
M>mklink не создаёт никакие софт линки без специального разрешения для этого. Может, через АПИ это по другому, я глубоко не копал
Да, ты прав. Политика "Create Symbolic Links" по умолчанию дает права на создание только группе Администраторов.
Но можно создавать junction point (mklink /j), для них достаточно прав на запись в каталог.
Здравствуйте, 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, и присовывая туда то, что нужно.
Не могу понять, какого хрена в винде эта возможность по умолчанию заблокирована
Здравствуйте, Alekzander, Вы писали:
A>Кто-нибудь делал такое?
A>Есть данные в моём приложении (допустим, картинки). И есть много чужих приложений, которые работают с файлами-картинками (скринсейвер-фотоальбом, менеджер обоев и т.п.). И, получается, чтобы подать им данные на вход, нужно изобразить папку с файлами.
A>Для этого есть какие-то стандартные инструменты? Куда копать? Желательно, мул ьтиплатформенно, но винда нужна в первую очередь.
Здравствуйте, 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, но вероятно это сделано только для определённых задач и вам не пригодится.
Здравствуйте, Marty, Вы писали:
A>>У таких папок, сколько мне помнится, гуид, а надо путь. Что прописать, например, в строке "Путь к изображениям" в виндовом реестре, откуда explorer берёт новую картинку для обоев по таймауту?
M>Это все не важно.
Как это "не важно", когда это часть юз-кейса? Диалога открытия файла (как и Explorer'а в любом виде) может вообще не быть, а путь к виртуальному файлу прописывается где-нибудь в конфиге.