Membuat Disk Multisession
API Penguasaan Gambar (IMAPI) mendukung penambahan dan penghapusan file ke, atau dari, jenis disk multi-sesi berikut:
- CD-R/CD-RW
- Single-Layer DVD+R/DVD-R
- DVD+R Lapisan Ganda
- BD-R
- DVD-RW/DVD+RW (Hanya untuk Windows 7)
- DVD-RAM (Hanya Windows 7)
- BD-RE (Hanya Windows 7)
Pembuatan disk multisesi menggunakan IMAPI terdiri dari langkah-langkah berikut. Masing-masing langkah yang didokumentasikan ini berisi bagian yang relevan dari contoh skrip Visual Basic lengkap yang disediakan di bagian akhir.
Menginisialisasi Perekam Disk
Sebelum inisialisasi perangkat, objek MsftDiscMaster2 menyediakan enumerasi perangkat optik pada sistem. AntarmukaIDiscMaster2menyediakan akses ke enumerasi perangkat ini untuk memfasilitasi lokasi perangkat perekaman yang sesuai. Objek MsftDiscMaster2 juga menyediakan pemberitahuan peristiwa saat perangkat optik ditambahkan ke atau dihapus dari komputer.
Setelah menemukan perekam optik dan mengambil ID yang ditetapkan untuknya, buat objek MsftDiscMaster2 baru dan inisialisasi perekam menggunakan ID perangkat tertentu.
AntarmukaIDiscRecorder2menyediakan akses ke informasi perangkat dasar seperti ID vendor, ID produk, revisi produk, serta metode untuk mengeluarkan media atau menutup baki.
Nota
Konstanta dan dimensi tambahan yang dideklarasikan dalam sampel berikut digunakan nanti di skrip sampel lengkap yang terletak di bagian akhir dokumen ini. Elemen-elemen ini tidak diperlukan untuk tindakan menginisialisasi perekam disk.
' *** CD/DVD disc file system types
Const FsiFileSystemISO9660 = 1
Const FsiFileSystemJoliet = 2
Const FsiFileSystemUDF102 = 4
WScript.Quit(Main)
Function Main
Dim Index ' Index to recording drive.
Dim Recorder ' Recorder object
Dim Path ' Directory of files to add
Dim Stream ' Data stream for burning device
Index = 0 ' First drive on the system
Path = "G:\BurnDir" ' Files to add to the disc
' Create a DiscMaster2 object to connect to optical drives.
Dim DiscMaster
Set DiscMaster = WScript.CreateObject("IMAPI2.MsftDiscMaster2")
' Create a DiscRecorder2 object for the specified burning device.
Dim UniqueId
set Recorder = WScript.CreateObject("IMAPI2.MsftDiscRecorder2")
UniqueId = DiscMaster.Item(Index)
Recorder.InitializeDiscRecorder(UniqueId)
Membuat Penulis Data
Objek MsftDiscFormat2Data menyediakan metode penulisan, propertinya, serta properti khusus media. AntarmukaIDiscFormat2Data menyediakan akses ke objek ini.
Perekam disk mengikat ke penulis format menggunakan properti IDiscFormat2Data::put_Recorder. Setelah perekam terikat ke penulis format, kueri media dan properti khusus untuk penulisan dapat dilakukan sebelum menulis gambar hasil ke cakram menggunakan metode IDiscFormat2Data::Write.
Nota
String nama klien yang ditentukan dalam kode sampel di bawah ini harus disesuaikan sebagaimana mestinya untuk aplikasi tertentu.
' Create a DiscFormat2Data object and set the recorder
Dim DataWriter
Set DataWriter = CreateObject ("IMAPI2.MsftDiscFormat2Data")
DataWriter.Recorder = Recorder
DataWriter.ClientName = "IMAPIv2 TEST"
Membuat Objek Sistem File
Untuk merekam sesi baru, gambar bakar harus dihasilkan terlebih dahulu. Gambar bakar untuk format ISO9660, Joliet dan UDF terdiri dari sistem file file dan direktori individual. Objek MsftFileSystemImage adalah objek sistem file yang berisi file dan direktori yang akan ditempatkan di media optik. Antarmuka IFileSystemImage menyediakan akses ke objek dan pengaturan sistem file.
' Create a new file system image object
Dim FSI
Set FSI = CreateObject("IMAPI2FS.MsftFileSystemImage")
Mengimpor Sistem File
Sebelum melanjutkan, pastikan bahwa disk tidak kosong dengan memeriksa properti IDiscFormat2::get_MediaHeuristicallyBlank.
Setelah membuat objek MsftFileSystemImage, properti IFileSystemImage::put_MultisessionInterfaces harus diinisialisasi sebelum memanggil metode IFileSystemImage::ImportFileSystem atau IFileSystemImage::ImportSpecificFileSystem untuk mengimpor sistem file dari sesi terakhir yang direkam. Metode ini akan secara otomatis mengisi objek MsftFileSystemImage dengan informasi yang menjelaskan file dan direktori yang direkam sebelumnya.
Nota
Properti IFileSystemImage::p ut_MultisessionInterfaces biasanya diinisialisasi dengan antarmuka multisesi yang disediakan oleh penulis data melalui properti IDiscFormat2Data::get_MultisessionInterfaces.
Upaya untuk mengatur properti IFileSystemImage::p ut_MultisessionInterfaces akan gagal jika IMAPI tidak mendukung multisesi untuk media yang saat ini dimasukkan atau media tidak dapat ditambahkan karena beberapa alasan lain (misalnya karena ditutup).
Jika sesi pembakaran sebelumnya berisi lebih dari satu jenis sistem file, metode IFileSystemImage::ImportFileSystem akan mengimpor informasi dari jenis sistem file paling canggih yang ada. Misalnya, dalam contoh yang disediakan dalam topik ini, UDF adalah sistem file yang diimpor. Namun, penggunaan metode IFileSystemImage::ImportSpecificFileSystem memungkinkan pilihan tertentu dari sistem file untuk diimpor.
Nota
Metode IFileSystemImage::IdentifiFileSystemsOnDisc dapat digunakan untuk menentukan sistem file mana yang tersedia di disk.
' Import the last session, if the disc is not empty, or initialize
' the file system, if the disc is empty
If Not DataWriter.MediaHeuristicallyBlank _
Then
On Error Resume Next
FSI.MultisessionInterfaces = DataWriter.MultisessionInterfaces
If Err.Number <> 0 _
Then
WScript.Echo "Multisession is not supported for this disc"
Main = 1
Exit Function
End If
On Error Goto 0
WScript.Echo "Importing data from the previous session..."
FSI.ImportFileSystem()
Else
FSI.ChooseImageDefaults(Recorder)
End If
Menambahkan atau Menghapus File ke Sistem File
Setelah membuat objek sistem file dan mengimpor sistem file dari sesi sebelumnya, panggil metode IFileSystemImage::CreateFileItem dan IFileSystemImage::CreateDirectoryItem untuk membuat file dan objek direktori baru. Objek file dan direktori memberikan detail spesifik tentang file dan direktori. Atau, metode IFsiDirectoryItem::AddTree objek direktori, yang diwakili melalui antarmukaIFsiDirectoryItem, dapat digunakan untuk menambahkan file dan direktori yang ada dari perangkat penyimpanan lain (yaitu hard drive).
Metode pembaruan penanganan aktivitas yang tersedia untuk IFileSystemImage mengidentifikasi file saat ini yang ditambahkan ke gambar sistem file, jumlah sektor yang sudah disalin, dan jumlah total sektor yang akan disalin.
Untuk menghapus file dan direktori yang ada dari sistem file, gunakan metode IFsiDirectoryItem::Hapus dan IFsiDirectoryItem::RemoveTree metode objek direktori yang diwakili melalui antarmukaIFsiDirectoryItem. Properti IFileSystemImage::get_Root digunakan untuk mendapatkan penunjuk ke direktori akar sistem file dan antarmuka IFsiDirectoryItem untuk melintasi pohon direktori.
Nota
File dan direktori yang dihapus melalui IFsiDirectoryItem::Hapus dan metode IFsiDirectoryItem::RemoveTree tidak dihapus secara fisik dari disk, dan perangkat lunak tingkat lanjut dapat dengan mudah memulihkan informasi yang dihapus.
' Add the directory and its contents to the file system
WScript.Echo "Adding " & Path & " directory to the disc..."
FSI.Root.AddTree Path, false
Membuat Gambar Sistem File
Langkah terakhir adalah memanggil IFileSystemImage::CreateResultImage untuk membuat aliran data untuk gambar bakar dan menyediakan akses ke dalamnya melalui antarmuka IFileSystemImageResult. Aliran data ini dapat disediakan langsung ke metode IDiscFormat2Data::Write atau disimpan ke file untuk digunakan nanti.
' Create an image from the file system image object
Dim Result
Set Result = FSI.CreateResultImage()
Stream = Result.ImageStream
Contoh Ringkasan
Contoh skrip Visual Basic berikut menunjukkan cara menggunakan objek IMAPI untuk membuat disk multisession. Contoh membuat sesi baru dan menambahkan direktori ke disk. Demi kesederhanaan, kode tidak melakukan pemeriksaan kesalahan yang luas, dan mengasumsikan hal berikut:
- Perangkat diska yang kompatibel diinstal pada sistem.
- Perangkat cakram adalah penggerak pertama pada sistem.
- Cakram yang kompatibel dimasukkan ke dalam perangkat disk.
- File yang akan ditambahkan ke disk terletak di "g:\burndir".
Fungsionalitas tambahan seperti pemeriksaan kesalahan yang luas, kompatibilitas perangkat dan media, pemberitahuan peristiwa, dan perhitungan ruang kosong pada disk dapat ditambahkan ke skrip.
' This script adds data files from a single directory tree to a
' disc (a new session is added, if the disc already contains data)
' Copyright (C) Microsoft. All rights reserved.
Option Explicit
' *** CD/DVD disc file system types
Const FsiFileSystemISO9660 = 1
Const FsiFileSystemJoliet = 2
Const FsiFileSystemUDF102 = 4
WScript.Quit(Main)
Function Main
Dim Index ' Index to recording drive.
Dim Recorder ' Recorder object
Dim Path ' Directory of files to add
Dim Stream ' Data stream for burning device
Index = 0 ' First drive on the system
Path = "G:\BurnDir" ' Files to add to the disc
' Create a DiscMaster2 object to connect to optical drives.
Dim DiscMaster
Set DiscMaster = WScript.CreateObject("IMAPI2.MsftDiscMaster2")
' Create a DiscRecorder2 object for the specified burning device.
Dim UniqueId
set Recorder = WScript.CreateObject("IMAPI2.MsftDiscRecorder2")
UniqueId = DiscMaster.Item(Index)
Recorder.InitializeDiscRecorder(UniqueId)
' Create a DiscFormat2Data object and set the recorder
Dim DataWriter
Set DataWriter = CreateObject ("IMAPI2.MsftDiscFormat2Data")
DataWriter.Recorder = Recorder
DataWriter.ClientName = "IMAPIv2 TEST"
' Create a new file system image object
Dim FSI
Set FSI = CreateObject("IMAPI2FS.MsftFileSystemImage")
' Import the last session, if the disc is not empty, or initialize
' the file system, if the disc is empty
If Not DataWriter.MediaHeuristicallyBlank _
Then
On Error Resume Next
FSI.MultisessionInterfaces = DataWriter.MultisessionInterfaces
If Err.Number <> 0 _
Then
WScript.Echo "Multisession is not supported for this disc"
Main = 1
Exit Function
End If
On Error Goto 0
WScript.Echo "Importing data from the previous session..."
FSI.ImportFileSystem()
Else
FSI.ChooseImageDefaults(Recorder)
End If
' Add the directory and its contents to the file system
WScript.Echo "Adding " & Path & " directory to the disc..."
FSI.Root.AddTree Path, false
' Create an image from the file system image object
Dim Result
Set Result = FSI.CreateResultImage()
Stream = Result.ImageStream
' Write stream to disc using the specified recorder
WScript.Echo "Writing content to the disc..."
DataWriter.Write(Stream)
WScript.Echo "Finished writing content."
Main = 0
End Function
Topik terkait
-
Menggunakan IMAPI