C#: создать виртуальный диск в компьютере
Есть ли способ создать виртуальный диск в "(Мой) компьютер" и манипулировать им, как это делает JungleDisk?
Это, вероятно, делает что-то вроде:
override OnRead(object sender, Event e) {
ShowFilesFromAmazon();
}
Есть ли какие-либо API для этого? Возможно, записать в XML-файл или базу данных вместо реального диска.
Библиотека Dokan, кажется, является ответом, который в основном соответствует моему вопросу, хотя System.IO.IsolatedStorage представляется наиболее стандартизированной и наиболее адаптированной к среде Microsoft.
4 ответа
Вы можете использовать библиотеку Dokan для создания виртуального диска. Существует.Net-оболочка для взаимодействия с C#.
В зависимости от того, какой тип виртуального диска вы хотите создать, вот несколько новых API ОС, недавно представленных в Windows, macOS и iOS.
Некоторые из приведенных ниже API доступны в виде управляемого кода .NET в Windows, но многие из них являются собственными API Windows / macOS / iOS. Несмотря на это, я смог использовать многие из приведенных ниже API в приложениях .NET и Xamarin и построить весь виртуальный диск на C# для Windows, macOS и iOS.
Для удаленного облачного хранилища
В Windows. Windows 10 предоставляет API Cloud Sync Engine для создания виртуальных дисков, которые публикуют данные из удаленного места. Он также известен под названием «Cloud Filter API» или «Windows Cloud Provider». Вот его основные особенности:
- Список папок по запросу. Список папок выполняется только тогда, когда клиентское приложение впервые запрашивает файловую систему. Содержимое файла не загружается, но все свойства файла, включая размер файла, доступны на клиенте через API обычных файлов.
- Загрузка содержимого файла по запросу. Содержимое файла можно загружать в нескольких режимах (последовательно) и делать доступным для ОС, когда приложение делает первый запрос на чтение содержимого файла.
- Поддержка автономных файлов. Файлы можно редактировать в автономном режиме, закреплять / откреплять и синхронизировать на / с сервера.
- Интеграция с оболочкой Windows. Диспетчер файлов Windows показывает статус файла (изменен, синхронизирован, конфликт) и ход загрузки файла.
- Поддержка метаданных и свойств. Пользовательские столбцы могут отображаться в диспетчере файлов Windows, а некоторые двоичные метаданные могут быть связаны с каждым файлом и папкой.
На macOS и iOS. MacOS Big Sur и iOS 11+ предоставляют аналогичный API, называемый File Provider API . Его функции аналогичны тем, что предоставляет Windows API:
- Список папок по запросу.
- Загрузка содержимого файлов по запросу.
- Поддержка автономных файлов.
- Интеграция файлового менеджера. В приложении MacOS Finder и iOS Files вы можете отображать статус файла (в облаке, локально).
В настоящее время я не уверен, могут ли файлы / папки отображать настраиваемые столбцы в MacOS Finder и хранить любые метаданные.
Для высокоскоростного локального хранилища
В Windows. Windows предоставляет ProjFS API . Его основное отличие от API Cloud Sync Engine и API поставщика файлов для macOS / iOS заключается в том, что он скрывает тот факт, что это удаленное хранилище. Он не дает никаких указаний о статусе файла, процессе загрузки и т. Д. В документации говорится, что он предназначен для «проецирования» иерархических данных в виде файловой системы.
Содержимое моего компьютера может включать расширения пространства имен оболочки. Эти COM-объекты запускаются внутри основного процесса Explorer, как и многие другие расширения оболочки. Использование C# для таких расширений - плохая идея, так как ваше расширение не может контролировать, какую версию CLR Explorer.exe можно использовать. И Microsoft допускает только один CLR на процесс.