2

hackchinacodeprojectの例を読みましたが、既存の .iso ファイルを書き込む方法がわかりません。上記の例は、フォルダーから .iso を作成し、それを書き込む方法を示しています。isoファイルを直接書き込めるようにしたいです。

ここにいくつかのコードがあります:

IDiscRecorder2 discRecorder = new MsftDiscRecorder2();
string Burner = comboBox1.SelectedItem.ToString();

foreach (DrvProperties prop in drv_props)
{
  if (prop.letter.Contains(Burner)) // letter contains the drive's Letter (E:, G: etc.)
  {
    discRecorder.InitializeDiscRecorder(prop.ID); // ID contains drive's uniqueID
  }

}

IDiscFormat2Data discFormatData = new MsftDiscFormat2Data();
discFormatData.Recorder = discRecorder;

IMAPI_MEDIA_PHYSICAL_TYPE mediaType = discFormatData.CurrentPhysicalMediaType;
......
......

誰かが私をさらに助けてくれませんか?example.iso があるとしましょう。私は今どうすればいい?理解できない。(CodeProject の例のコードで IMAPI2.interop を使用しました)。

どうもありがとう

4

1 に答える 1

3

まず、次の名前空間を含める必要があることがわかりました。

using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;

IStream を使用できるようにするため。

次に、shlwapi.dll から SHCreateStreamOnFIle をインポートして、その iso への「読み取りストリーム」を開く必要があります。

private const uint STGM_SHARE_DENY_WRITE = 0x00000020;
    private const uint STGM_SHARE_DENY_NONE = 0x00000040;
    private const uint STGM_READ = 0x00000000;
    private const uint STGM_WRITE = 0x00000001;
    private const uint STGM_READWRITE = 0x00000002;

     [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true,    PreserveSig = false, EntryPoint = "SHCreateStreamOnFileW")]
    static extern void SHCreateStreamOnFile(string fileName, uint mode, ref IStream stream);

IStream stream = null;
SHCreateStreamOnFile(path2iso, STGM_READ | STGM_SHARE_DENY_WRITE, ref stream);

最後に i を discFormatData.Write() メソッドに渡します。

discFormatData.Write(stream);

誰かの役に立てば幸いです。気をつけて

于 2011-12-24T15:40:09.317 に答える