Sdílet prostřednictvím


Vytvoření multisessionového disku

Rozhraní IMAGE Mastering API (IMAPI) podporuje přidávání a odebírání souborů do nebo z následujících vícesessionových typů disků:

  • CD-R/CD-RW
  • Single-Layer DVD+R/DVD-R
  • DVD+R dvouvrstvé
  • BD-R
  • DVD-RW/DVD+RW (Jen Windows 7)
  • DVD-RAM (Pouze pro Windows 7)
  • BD-RE (Windows 7 Pouze)

Vytvoření multisessionového disku pomocí IMAPI se skládá z následujících kroků. Každý z těchto zdokumentovaných kroků obsahuje příslušnou část kompletního příkladu skriptu jazyka Visual Basic, který je uvedený v poslední části.

Inicializace záznamu disku

Před inicializací zařízení MsftDiscMaster2 objekt poskytuje výčet optických zařízení v systému. Rozhraní IDiscMaster2 poskytuje přístup k tomuto výčtu zařízení pro usnadnění umístění příslušného záznamového zařízení. Objekt MsftDiscMaster2 také poskytuje oznámení událostí při přidání nebo odebrání optických zařízení z počítače.

Po vyhledání optického záznamu a načtení přiřazeného ID vytvořte nový MsftDiscMaster2 objekt a inicializujete záznam pomocí konkrétního ID zařízení.

Rozhraní IDiscRecorder2 poskytuje přístup k základním informacím o zařízení, jako je ID dodavatele, ID produktu, revize produktu a také metody pro vysunutí média nebo zavření zásobníku.

Poznámka

Další konstanty a dimenze deklarované v následující ukázce se později použijí v kompletním ukázkovém skriptu umístěném v poslední části tohoto dokumentu. Tyto prvky nejsou vyžadovány pro inicializaci záznamu disku.

 

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

Vytvoření zapisovače dat

MsftDiscFormat2Data objekt poskytuje metodu zápisu, jeho vlastnosti a také vlastnosti specifické pro média. Rozhraní IDiscFormat2Data poskytuje přístup k tomuto objektu.

Záznamník disku se váže na formátového zapisovače pomocí vlastnosti IDiscFormat2Data::put_Recorder. Jakmile je rekordér vázán na zapisovač formátu, lze před zápisem výsledného obrazu na disk pomocí metody IDiscFormat2Data::Write provádět dotazy specifické pro média a zápis.

Poznámka

Řetězec názvu klienta zadaný v níže uvedeném vzorovém kódu by se měl upravit podle potřeby pro konkrétní aplikaci.

 

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

Vytvoření objektu systému souborů

Aby bylo možné zaznamenat novou relaci, musí se pro ni nejprve vygenerovat burn image. Zaváděcí obraz pro formáty ISO9660, Joliet a UDF se skládá ze systémů souborů jednotlivých souborů a adresářů. MsftFileSystemImage objekt je objekt systému souborů, který obsahuje soubory a adresáře, které mají být umístěny na optické médium. Rozhraní IFileSystemImage poskytuje přístup k objektu a nastavení systému souborů.

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

Import systému souborů

Než budete pokračovat, ujistěte se, že disk není prázdný kontrolou vlastnosti IDiscFormat2::get_MediaHeuristicallyBlank.

Po vytvoření objektu MsftFileSystemImage by se měla inicializovat vlastnost IFileSystemImage::put_MultisessionInterfaces před voláním buď metody IFileSystemImage::ImportFileSystem nebo IFileSystemImage::ImportSpecificFileSystem k importu systému souborů z poslední zaznamenané relace. Tyto metody automaticky naplní objekt MsftFileSystemImage informacemi popisující dříve zaznamenané soubory a adresáře.

Poznámka

Vlastnost IFileSystemImage::put_MultisessionInterfaces je obvykle inicializována pomocí multisession rozhraní poskytovaných zapisovačem dat prostřednictvím vlastnosti IDiscFormat2Data::get_MultisessionInterfaces.

 

Pokusy o nastavení vlastnosti IFileSystemImage::put_MultisessionInterfaces selžou, pokud IMAPI nepodporuje vícesložkovou relaci pro aktuálně vložená média nebo tato média nelze připojit z jiného důvodu (např. protože jsou uzavřená).

Pokud předchozí relace vypalování obsahovala více než jeden typ systému souborů, IFileSystemImage::ImportFileSystem metoda importuje informace z nejpokročilejšího typu systému souborů. Například v příkladu uvedeném v tomto tématu je UDF importovaný systém souborů. Použití IFileSystemImage::ImportSpecificFileSystem metoda umožňuje konkrétní výběr systému souborů importovat.

Poznámka

Metodu IFileSystemImage::IdentifyFileSystemsOnDisc lze použít k určení, které systémy souborů jsou na disku k dispozici.

 

    ' 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

Přidání nebo odebrání souborů do systému souborů

Po vytvoření objektu systému souborů a importu systému souborů z předchozí relace zavolejte metody IFileSystemImage::CreateFileItem a IFileSystemImage::CreateDirectoryItem k vytvoření nových objektů souborů a adresářů. Objekty souborů a adresářů poskytují konkrétní podrobnosti o souborech a adresářích. Alternativně lze metodu IFsiDirectoryItem::AddTree objektu adresáře reprezentovanou prostřednictvím rozhraní IFsiDirectoryItem použít k přidání existujících souborů a adresářů z jiného úložného zařízení (tj. pevného disku).

Metoda aktualizace obslužné rutiny události dostupná pro IFileSystemImage identifikuje aktuální soubor přidaný do image systému souborů, počet sektorů, které jsou již zkopírovány, a celkový počet sektorů, které se mají zkopírovat.

Chcete-li odebrat existující soubory a adresáře ze systému souborů, použijte IFsiDirectoryItem::Remove a IFsiDirectoryItem::RemoveTree metody objektů adresáře reprezentované prostřednictvím IFsiDirectoryItem rozhraní. Vlastnost IFileSystemImage::get_Root slouží k získání ukazatele na kořenový adresář systému souborů a rozhraní IFsiDirectoryItem pro procházení stromem adresáře.

Poznámka

Soubory a adresáře odebrané prostřednictvím IFsiDirectoryItem::Remove a IFsiDirectoryItem::RemoveTree metody nejsou fyzicky odebrány z disku a pokročilý software může snadno obnovit odstraněné informace.

 

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

Vytvoření obrazu souborového systému

Posledním krokem je volání IFileSystemImage::CreateResultImage pro vytvoření datového proudu pro vypalovací image a umožnění přístupu k němu prostřednictvím IFileSystemImageResult rozhraní. Tento datový proud lze poskytnout buď přímo do metody IDiscFormat2Data::Write, nebo uložit do souboru pro pozdější použití.

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

Příklad souhrnu

Následující příklad skriptu jazyka Visual Basic ukazuje, jak pomocí objektů IMAPI vytvořit vícesessionní disky. Příklad vytvoří novou relaci a přidá adresář na disk. Kvůli jednoduchosti kód neprovádí rozsáhlou kontrolu chyb a předpokládá následující:

  • V systému je nainstalováno kompatibilní diskové zařízení.
  • Diskové zařízení je první jednotka v systému.
  • Do zařízení disku se vloží kompatibilní disk.
  • Soubory, které se mají přidat na disk, se nacházejí v umístění g:\burndir.

Do skriptu je možné přidat další funkce, jako je rozsáhlá kontrola chyb, kompatibilita zařízení a média, oznámení o událostech a výpočet volného místa na disku.

' 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

Použití IMAPI

IStream

IDiscMaster2

IDiscFormat2Data

IFileSystemImage