Condividi tramite


Creazione di un disco multisessione

L'API Image Mastering (IMAPI) supporta l'aggiunta e la rimozione dei file in o dai tipi di disco multisessione seguenti:

  • CD-R/CD-RW
  • Single-Layer DVD+R/DVD-R
  • DVD+R Dual Layer
  • BD-R
  • DVD-RW/DVD+RW (solo Windows 7)
  • DVD-RAM (solo Windows 7)
  • BD-RE (solo Windows 7)

La creazione di un disco multisessione con IMAPI è costituita dalla procedura seguente. Ognuno di questi passaggi documentati contiene la parte pertinente dell'esempio di script Visual Basic completo fornito nella sezione finale.

Inizializzazione del registratore di dischi

Prima dell'inizializzazione del dispositivo, l'oggetto MsftDiscMaster2 fornisce un'enumerazione dei dispositivi ottici nel sistema. L'interfaccia IDiscMaster2 fornisce l'accesso a questa enumerazione del dispositivo per facilitare la posizione del dispositivo di registrazione appropriato. L'oggetto MsftDiscMaster2 fornisce anche notifiche di evento quando i dispositivi ottici vengono aggiunti o rimossi da un computer.

Dopo aver individuato un registratore ottico e recuperato l'ID assegnato a esso, creare un nuovo oggetto MsftDiscMaster2 e inizializzare il registratore usando l'ID dispositivo specifico.

L'interfaccia IDiscRecorder2 fornisce l'accesso alle informazioni di base sul dispositivo, ad esempio ID fornitore, ID prodotto, revisione del prodotto, nonché i metodi per esettare supporti o chiudere la barra.

Nota

Le costanti e le dimensioni aggiuntive dichiarate nell'esempio seguente vengono usate più avanti nello script di esempio completo che si trova nella sezione finale di questo documento. Questi elementi non sono necessari per l'atto di inizializzare un registratore di dischi.

 

' *** 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)

Creazione di un writer di dati

L'oggetto MsftDiscFormat2Data fornisce il metodo di scrittura, le relative proprietà e le proprietà specifiche dei supporti. L'interfaccia IDiscFormat2Data fornisce l'accesso a questo oggetto.

Il registratore di dischi viene associato al writer di formato usando la proprietà IDiscFormat2Data::p ut_Recorder . Dopo che il registratore è associato al writer di formato, è possibile eseguire query di proprietà specifiche del supporto e scrittura prima di scrivere l'immagine del risultato nel disco usando il metodo IDiscFormat2Data::Write .

Nota

La stringa del nome client specificata nel codice di esempio seguente deve essere modificata in base alle esigenze dell'applicazione specifica.

 

    ' Create a DiscFormat2Data object and set the recorder
    Dim DataWriter
    Set DataWriter = CreateObject ("IMAPI2.MsftDiscFormat2Data")
    DataWriter.Recorder = Recorder
    DataWriter.ClientName = "IMAPIv2 TEST"

Creazione dell'oggetto File System

Per registrare una nuova sessione, per prima cosa deve essere generata un'immagine di burn. Un'immagine di masterizzazione per i formati ISO9660, Joliet e UDF è costituita da file system singoli file e directory. L'oggetto MsftFileSystemImage è l'oggetto file system che contiene i file e le directory da inserire nel supporto ottico. L'interfaccia IFileSystemImage fornisce l'accesso all'oggetto e alle impostazioni del file system.

    ' Create a new file system image object
    Dim FSI
    Set FSI = CreateObject("IMAPI2FS.MsftFileSystemImage")

Importazione di un file system

Prima di procedere, assicurarsi che il disco non sia vuoto controllando la proprietà IDiscFormat2::get_MediaHeuristicallyBlank .

Dopo aver creato l'oggetto MsftFileSystemImage , la proprietà IFileSystemImage::p ut_MultisessionInterfaces deve essere inizializzata prima di una chiamata al metodo IFileSystemImage::ImportFileSystem o IFileSystemImage: :ImportSpecificFileSystem per importare il file system dall'ultima sessione registrata. Questi metodi popolano automaticamente l'oggetto MsftFileSystemImage con informazioni che descrivono i file e le directory registrati in precedenza.

Nota

La proprietà IFileSystemImage::p ut_MultisessionInterfaces viene in genere inizializzata con le interfacce multisessione fornite dal writer di dati tramite la proprietà IDiscFormat2Data::get_MultisessionInterfaces .

 

I tentativi di impostare la proprietà IFileSystemImage::p ut_MultisessionInterfaces avranno esito negativo se IMAPI non supporta la multisessione per i supporti attualmente inseriti o non è possibile aggiungere il supporto per un altro motivo,ad esempio perché è chiuso.

Se la sessione di burn precedente contiene più di un tipo di file system, il metodo IFileSystemImage::ImportFileSystem importa le informazioni dal tipo di file system più avanzato presente. Ad esempio, nell'esempio fornito in questo argomento, la funzione UDF è il file system importato. Tuttavia, l'uso del metodo IFileSystemImage::ImportSpecificFileSystem consente la selezione specifica del file system da importare.

Nota

Il metodo IFileSystemImage::IdentifiFileSystemsOnDisc può essere usato per determinare quali file system sono disponibili nel disco.

 

    ' 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

Aggiunta o rimozione di file nel file system

Dopo aver creato l'oggetto file system e importato il file system dalla sessione precedente, chiamare rispettivamente i metodi IFileSystemImage::CreateFileSystemImage::CreateDirectoryItem per creare nuovi oggetti file e directory. Gli oggetti file e directory forniscono dettagli specifici sui file e le directory. In alternativa, il metodo IFsiDirectoryItem::AddTree di un oggetto directory, rappresentato tramite l'interfaccia IFsiDirectoryItem , può essere usato per aggiungere file e directory esistenti da un altro dispositivo di archiviazione(ad esempio un disco rigido).

Il metodo di aggiornamento del gestore eventi disponibile per IFileSystemImage identifica il file corrente da aggiungere all'immagine del file system, il numero di settori già copiati e il numero totale di settori da copiare.

Per rimuovere file e directory esistenti dal file system, usare i metodi IFsiDirectoryItem::Remove e IFsiDirectoryItem::RemoveTree degli oggetti directory rappresentati tramite l'interfaccia IFsiDirectoryItem. La proprietà IFileSystemImage::get_Root viene utilizzata per ottenere un puntatore alla directory radice del file system e all'interfaccia IFsiDirectoryItem per attraversare l'albero della directory.

Nota

I file e le directory rimossi tramite IFsiDirectoryItem::Remove e IFsiDirectoryItem::RemoveTree non vengono rimossi fisicamente dal disco e il software avanzato può facilmente recuperare le informazioni eliminate.

 

    ' Add the directory and its contents to the file system 
    WScript.Echo "Adding " & Path & " directory to the disc..."
    FSI.Root.AddTree Path, false

Creazione di un'immagine del file system

Il passaggio finale consiste nel chiamare IFileSystemImage::CreateResultImage per creare un flusso di dati per l'immagine di burn e fornire l'accesso tramite l'interfaccia IFileSystemImageResult . Questo flusso di dati può essere fornito direttamente al metodo IDiscFormat2Data::Write o salvato in un file per un uso successivo.

    ' Create an image from the file system image object
    Dim Result
    Set Result = FSI.CreateResultImage()
    Stream = Result.ImageStream

Riepilogo di esempio

Nell'esempio di script visual Basic seguente viene illustrato come usare oggetti IMAPI per creare dischi multisessione. Nell'esempio viene creata una nuova sessione e viene aggiunta una directory al disco. Per motivi di semplicità, il codice non esegue un controllo completo degli errori e presuppone quanto segue:

  • Un dispositivo disco compatibile è installato nel sistema.
  • Il dispositivo disco è la prima unità del sistema.
  • Un disco compatibile viene inserito nel dispositivo disco.
  • I file da aggiungere al disco si trovano in "g:\burndir".

Altre funzionalità, ad esempio il controllo completo degli errori, la compatibilità del dispositivo e dei supporti, la notifica degli eventi e il calcolo dello spazio libero sul disco possono essere aggiunti allo script.

' 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

Uso di IMAPI

IStream

IDiscMaster2

IDiscFormat2Data

IFileSystemImage