Bagikan melalui


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

Menggunakan IMAPI

IStream

IDiscMaster2

IDiscFormat2Data

IFileSystemImage