Я пытаюсь добиться запуска программы, которая думает, что папка существует в ее собственной папке, а на самом деле эта папка находится где-то еще в системе.
Поэтому моя программа запустит процесс и скажет процессу: папка A, находящаяся в C: \ A, находится в вашем собственном каталоге в C: \ Program Files (x86) \ SomeProgram \ A
Таким образом, «виртуальный» каталог будет виден только этому процессу.
Я использую Qt для программирования своей программы, поэтому, если есть какие-либо функции Qt, которые я мог бы использовать, это было бы здорово (в отношении переносимости). Тем не менее, план C ++ или любые связанные с Windows API будут в порядке.
Я думал о переходах NTFS или символических ссылках, но я не знал, как создать какие-либо из них в C ++, не говоря уже о том, чтобы связать их с определенным процессом.
Заранее спасибо!
РЕДАКТИРОВАТЬ:
В связи с вышеизложенным, я нашел этот вопрос: https://superuser.com/questions/234422/does-windows7-support-symbolic-links-folder-shortcuts. Тем не менее, он показывает только, как выполнить необходимые действия из командной строки, и он не будет привязан к процессу.
РЕДАКТИРОВАТЬ 2:
Некоторая дополнительная информация: я пытаюсь создать виртуальный каталог, который состоит из пары других каталогов, но затем объединен (я использую систему приоритетов, чтобы решить, какие файлы «выигрывают» из других файлов). Эти объединенные каталоги будут отображаться целевому процессу как один каталог, содержащий объединенные файлы.
Я думаю, что я собираюсь придерживаться команды Window mklink. Кажется, лучше всего подходит для моих нужд.
Я собираюсь использовать QFile :: link () во всех операционных системах, отличных от Windows, и QProcess с mklink в Windows. Это должно работать на каждой операционной системе.
Для хорошего примера посмотрите здесь: https://stackoverflow.com/a/21013935/979732
Такие задачи решаются с помощью драйвера фильтра файловой системы. Драйвер перехватывает запросы ОС, поступающие в файловую систему, и позволяет вам вставлять ваши собственные виртуальные файлы и каталоги в существующий каталог на диске. Однако драйвер фильтра может быть излишним для вашей конкретной задачи.
Подход обхода, упомянутый в комментариях, требует общесистемного перехвата файловых API и замедлит работу всей системы (драйвер фильтра файловой системы подключен к одному диску, и это документированный подход, поэтому он быстрее и надежнее).