WеniZAY • • • 1 .NET DiscUtils — open source-библиотека .NET Framework для доступа и работы с образами виртуальных дисков. Библиотека полностью написанная на C#, и доступна на сайте Microsoft CodePlex.
WеniZAY • • • 2 Поддерживаемые форматы.NET DiscUtils поддерживает несколько форматов образов дисков, схем выделения разделов и файловых систем Windows.
WеniZAY • • • 3 Форматы дисковых образовVHDVMDKVDIISOUDFSDIWIMНеобработанные образы дисков (IMA, IMG, VFD, FLP)
WеniZAY • • • 4 Схем выделения разделовТаблица разделов BIOSТаблица разделов GUIDДиспетчер логических дисков
WеniZAY • • • 5 Файловые системыFATFAT32NTFSВ файловых системах FAT и FAT32 отсутствует поддержка длинных имён файлов.
WеniZAY • • • 6 ПримерыСоздание ISO образаКодCDBuilder builder = new CDBuilder();builder.UseJoliet = true;builder.VolumeIdentifier = "A_SAMPLE_DISK";builder.AddFile(@"Folder\Hello.txt", Encoding.ASCII.GetBytes("Hello World!"));builder.Build(@"C:\temp\sample.iso");
WеniZAY • • • 7 Распаковка файлов ISO образаКодusing (FileStream isoStream = File.Open(@"C:\temp\sample.iso")){ CDReader cd = new CDReader(isoStream, true); Stream fileStream = cd.OpenFile(@"Folder\Hello.txt", FileMode.Open); // Используйте fileStream...}
WеniZAY • • • 8 Создание виртуального дискаКодlong diskSize = 30 * 1024 * 1024; // 30 MBusing (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"); // Остальные действия с файловой системой... }}Данный пример создает виртуальный VHD-диск с динамическим расширением. Нижеследующий пример создаст диск с фиксированным размером.Кодlong diskSize = 30 * 1024 * 1024; // 30 MBusing (Stream vhdStream = File.Create(@"C:\TEMP\mydisk.vhd")){ Disk disk = Disk.InitializeFixed(vhdStream, diskSize); BiosPartitionTable.Initialize(disk, WellKnownPartitionType.WindowsFat); using (FatFileSystem fs = FatFileSystem.FormatPartition(disk, 0, null)) { fs.CreateDirectory(@"TestDir\CHILD"); // Остальные действия с файловой системой... }}
WеniZAY • • • 9 Создание флоппи-дискаКодusing (FileStream fs = File.Create(@"myfloppy.vfd")){ using (FatFileSystem floppy = FatFileSystem.FormatFloppy(fs, FloppyDiskType.HighDensity, "MY FLOPPY ")) { using (Stream s = floppy.OpenFile("foo.txt", FileMode.Create)) { // Используйте поток stream... } }}
.NET DiscUtils поддерживает несколько форматов образов дисков, схем выделения разделов и файловых систем Windows.
VHD
VMDK
VDI
ISO
UDF
SDI
WIM
Необработанные образы дисков (IMA, IMG, VFD, FLP)
Таблица разделов BIOS
Таблица разделов GUID
Диспетчер логических дисков
FAT
FAT32
NTFS
В файловых системах FAT и FAT32 отсутствует поддержка длинных имён файлов.
Создание ISO образа
builder.UseJoliet = true;
builder.VolumeIdentifier = "A_SAMPLE_DISK";
builder.AddFile(@"Folder\Hello.txt", Encoding.ASCII.GetBytes("Hello World!"));
builder.Build(@"C:\temp\sample.iso");
{
CDReader cd = new CDReader(isoStream, true);
Stream fileStream = cd.OpenFile(@"Folder\Hello.txt", FileMode.Open);
// Используйте fileStream...
}
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");
// Остальные действия с файловой системой...
}
}
Данный пример создает виртуальный VHD-диск с динамическим расширением. Нижеследующий пример создаст диск с фиксированным размером.
using (Stream vhdStream = File.Create(@"C:\TEMP\mydisk.vhd"))
{
Disk disk = Disk.InitializeFixed(vhdStream, diskSize);
BiosPartitionTable.Initialize(disk, WellKnownPartitionType.WindowsFat);
using (FatFileSystem fs = FatFileSystem.FormatPartition(disk, 0, null))
{
fs.CreateDirectory(@"TestDir\CHILD");
// Остальные действия с файловой системой...
}
}
{
using (FatFileSystem floppy = FatFileSystem.FormatFloppy(fs, FloppyDiskType.HighDensity, "MY FLOPPY "))
{
using (Stream s = floppy.OpenFile("foo.txt", FileMode.Create))
{
// Используйте поток stream...
}
}
}