Я пытаюсь создать виртуальный жесткий диск с NTFS в .NET Core.
Я обнаружил пакет DiscUtils NuGet и пример кода на их странице GitHub отлично работает для созданияVHD с форматом FAT.
long diskSize = 30 * 1024 * 1024; //30MB
using (Stream vhdStream = File.Create(@"C:\TEMP\mydisk.vhd"))
{
Disk disk = Disk.InitializeDynamic(vhdStream, diskSize);
BiosPartitionTable.Initialize(disk, WellKnownPartitionType.WindowsFat);
using (FatFileSystem fs = FatFileSystem.FormatPartition(disk, 0, null))
{
fs.CreateDirectory(@"TestDir\CHILD");
// do other things with the file system...
}
}
Но для моего случая использования мне нужны файлы размером более 2 ГБ.Поскольку мы все равно используем Windows, NTFS в порядке.Поэтому я попробовал этот код
long diskSize = 300 * 1024 * 1024; //300 MB
var vhdPath = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Path.GetRandomFileName(), "vhd"));
using (Stream vhdStream = File.Create(vhdPath))
{
var disk = DiscUtils.Vhd.Disk.InitializeFixed(vhdStream, Ownership.None, diskSize);
BiosPartitionTable.Initialize(disk, WellKnownPartitionType.WindowsNtfs);
using (var ntfs = NtfsFileSystem.Format(vhdStream, "Virtual NTFS drive", Geometry.FromCapacity(diskSize), 0, diskSize / Sizes.Sector))
{
ntfs.CreateDirectory(@"TestDir\CHILD");
// do other things with the file system...
}
}
Этот код создает виртуальный жесткий диск объемом 300 МБ, который я могу открыть с помощью 7zip, но он содержит файл ~ 300 МБ * .mbr.Если я попытаюсь открыть, откроется новое окно 7zip в папке Temp.Если я дважды блокирую этот VHD, я получаю сообщение об ошибке Windows: «Образ диска не инициализирован, содержит нераспознанные разделы или тома, которые не были назначены букве диска. Используйте оснастку« Управление диском », чтобы убедиться, что диск, разделы иобъемы в рабочем состоянии ".(свободно переводится с немецкого)
После этого я больше не могу получить доступ к файлу, потому что какой-то процесс Windows все еще держит его занятым.
Что я здесь неправильно понимаю?
Есть ли другой способ создания / подключения виртуальных жестких дисков с помощью C # и .NET Core?