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
Argomenti correlati