亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#調用Nero SDK刻錄光盤的方法

2020-01-24 01:36:09
字體:
來源:轉載
供稿:網友

本文實例講述了C#調用Nero SDK刻錄光盤的方法。分享給大家供大家參考。具體如下:

項目中有多光驅刻錄的需求,但在一個進程里同時啟動多個刻錄任務,進程經常報異常,于是把刻錄部分單獨做了個控制臺程序,每個光驅刻錄就啟動一個進程去執行刻錄任務,這樣就算刻錄進程出錯也不會影響到父進程。

以下是Nero 刻碟的類,SDK采用NeroSDK-1.08版本,調用NeroCOM組件。調用時必須引用Interop.NEROLib.dll 和 Interop.NeroVisionAPI.dll 兩個dll。

public class NeroBurn{  #region 屬性  private NeroDrive m_neroDerive;  private Nero m_nero;  private bool m_aborted;  private string m_burnPath;  private bool m_isDoneBurn;  private int m_returnCode;//0:失?。?:成功;-1:未知  private string m_discvol;  //nero 委托  private _INeroDriveEvents_OnDoneBurnEventHandler m_evOnDoneBurn;  private _INeroDriveEvents_OnAddLogLineEventHandler m_evOnAddLogLine;  private _INeroEvents_OnWaitCDEventHandler m_evOnWaitCD;  private _INeroDriveEvents_OnAbortedEventHandler m_evOnAborted;  private _INeroDriveEvents_OnProgressEventHandler m_evOnProgress;  private _INeroEvents_OnWaitCDDoneEventHandler m_evOnWaitCDDone;  #endregion   #region 構造函數  /// <summary></summary>  /// 構造函數  ///   /// <param name="driverletter">盤符  /// <param name="burnpath">待刻錄的文件路徑  /// <param name="discvol">盤的卷標  public NeroBurn(string driverletter,string burnpath,string discvol)  {   m_burnPath = burnpath;   m_nero = new NeroClass();   m_neroDerive = allocDevice(driverletter);   m_aborted = false;   m_isDoneBurn = false;   m_discvol = discvol;  }  #endregion   #region Nero事件處理  /// <summary></summary>  /// 發起刻錄事件  ///   /// <param name="bSubscribe">  private void SubscribeToEvents(bool bSubscribe)  {   if (bSubscribe)   {    m_evOnAddLogLine = new _INeroDriveEvents_OnAddLogLineEventHandler(m_drive_OnAddLogLine);    m_neroDerive.OnAddLogLine += m_evOnAddLogLine;    m_evOnWaitCD = new _INeroEvents_OnWaitCDEventHandler(m_nero_OnWaitCD);    m_nero.OnWaitCD += m_evOnWaitCD;    m_evOnDoneBurn = new _INeroDriveEvents_OnDoneBurnEventHandler(m_drive_OnDoneBurn);    m_neroDerive.OnDoneBurn += m_evOnDoneBurn;    m_evOnWaitCDDone = new _INeroEvents_OnWaitCDDoneEventHandler(m_nero_OnWaitCDDone);    m_nero.OnWaitCDDone += m_evOnWaitCDDone;    m_evOnProgress = new _INeroDriveEvents_OnProgressEventHandler(m_drive_OnProgress);    m_neroDerive.OnProgress += m_evOnProgress;   }   else   {        m_neroDerive.OnAddLogLine -= m_evOnAddLogLine;    m_nero.OnWaitCD -= m_evOnWaitCD;    m_nero.OnWaitCDDone -= m_evOnWaitCDDone;    m_neroDerive.OnDoneBurn -= m_evOnDoneBurn;    m_neroDerive.OnProgress -= m_evOnProgress;   }  }  private void m_drive_OnProgress(ref int ProgressInPercent, ref bool Abort)  {   // This events gives us an opportunity to show progress   // as well as abort if needed.   //    Abort = m_aborted;      Console.WriteLine("光盤" + m_discvol + " " + ProgressInPercent.ToString() + "% had Burned!!");   //c_TaskPercent.Text = ProgressInPercent.ToString() + "%";  }  private void m_nero_OnWaitCDDone()  {   // When waiting on a disc is done, make sure to   // enable us and hide the WaitCD form.   //    Console.WriteLine("a Disc has inserted!");  }  /// <summary></summary>  ///刻錄完成,不管失敗成功!   ///   /// <param name="StatusCode">  private void m_drive_OnDoneBurn(ref NERO_BURN_ERROR StatusCode)  {   // When burning is over, make sure to unsubscribe from all   // events.   //    SubscribeToEvents(false);   if (StatusCode == NERO_BURN_ERROR.NERO_BURN_OK)   {    m_returnCode = 1;    Console.WriteLine(m_neroDerive.DriveLetter + "盤卷標為 " + m_discvol + " 刻錄成功!!");   }   else   {    m_returnCode = 0;    Console.WriteLine(m_neroDerive.DriveLetter + "盤卷標為 " + m_discvol + " 刻錄失敗!!");   }   m_isDoneBurn = true;   Console.WriteLine("Burn Finish!!");  }  /// <summary></summary>  /// 如果光驅為空,等待光驅  ///   /// <param name="WaitCD">  /// <param name="WaitCDLocalizedText">  private void m_nero_OnWaitCD(ref NERO_WAITCD_TYPE WaitCD, ref string WaitCDLocalizedText)  {   Console.WriteLine("Wait CD...");  }  /// <summary></summary>  /// 寫日志  ///   /// <param name="TextType">  /// <param name="Text">  private void m_drive_OnAddLogLine(ref NERO_TEXT_TYPE TextType, ref string Text)  {   Console.WriteLine( Text);  }  #endregion   #region 申請設備  /// <summary></summary>  /// 申請設備  ///   /// <param name="driverletter">  /// <returns></returns>  private NeroDrive allocDevice(string driverletter)  {   NeroDrives drives = m_nero.GetDrives(NERO_MEDIA_TYPE.NERO_MEDIA_DVD_M);   if (drives.Count > 0)   {    foreach (NeroDrive d in drives)    {     if (driverletter.ToLower().Contains(d.DriveLetter.ToLower()))      return d;    }   }   return null;  }  #endregion   #region 刻錄  /// <summary></summary>  /// 刻錄  ///   /// <returns></returns>0: 失?。?:成功;-1:未知錯誤  public int Burn()  {   m_isDoneBurn = false;    SubscribeToEvents(true);   NeroISOTrack isoTrack = new NeroISOTrackClass();   isoTrack.BurnOptions = (NERO_BURN_OPTIONS)((uint)NERO_BURN_OPTIONS.NERO_BURN_OPTION_CREATE_ISO_FS + (uint)NERO_BURN_OPTIONS.NERO_BURN_OPTION_USE_JOLIET);   isoTrack.Name = m_discvol;   Console.WriteLine("Begin AddFilesAndFoldersToISOTrack.");   AddFilesAndFoldersToISOTrack(ref isoTrack, m_burnPath);   Console.WriteLine("End AddFilesAndFoldersToISOTrack.");   if (isoTrack.RootFolder.Files.Count == 0 &&     isoTrack.RootFolder.Folders.Count == 0)   {    isoTrack = null;    return 0;   }   NERO_BURN_FLAGS flags = new NERO_BURN_FLAGS();   flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE;   flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_CLOSE_SESSION;   flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_BUF_UNDERRUN_PROT;   flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DISABLE_ABORT;   flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DAO;   flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_CD_TEXT;   flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DETECT_NON_EMPTY_CDRW;   flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_SPEED_IN_KBS;    try   {    if (null == m_neroDerive)    {     Console.WriteLine("m_neroDerive is null!!");     return -1;    }    int speed = 10000;    string BurnSpeed_s = System.Configuration.ConfigurationSettings.AppSettings["BurnSpeed"];    if (!string.IsNullOrEmpty(BurnSpeed_s))     speed = int.Parse(BurnSpeed_s);    m_neroDerive.BurnIsoAudioCD("", "", false,     isoTrack,     null,     null,     flags,      speed,      NERO_MEDIA_TYPE.NERO_MEDIA_DVD_M);    //循環執行,等待刻錄完成    while (true)    {     if(m_isDoneBurn) //如果刻錄完成      return m_returnCode;     System.Threading.Thread.Sleep(1000);    }   }   catch (Exception e)   {    m_aborted = true;    Console.WriteLine("Burn Error : "+e.Message);    return 0;   }   return -1;  }  #endregion   #region 輔助函數  /// <summary></summary>  /// This function adds the files and folders to the supplied NeroISOTrack.  /// Add by Cola 2008-4-14  ///   /// <param name="isoTrack">  /// <param name="discPath">  private void AddFilesAndFoldersToISOTrack(ref NeroISOTrack isoTrack, string discPath)  {   string sPath = discPath;   // The string should really not be empty...   //    if (sPath != "")   {    // If path ends in a backslash, it is a folder.    //     if (sPath[sPath.Length - 1] == '//')    {     NeroFolder folder = isoTrack.RootFolder;     AddFolderRecursively(ref folder, sPath);    }    else    {     // This is a file. Create a new NeroFile     // change its properties.     //      NeroFile file = new NeroFileClass();     file.SourceFilePath = sPath;     file.Name = Path.GetFileName(sPath);     file.EntryTime = Directory.GetLastWriteTime(sPath);     // In this implementation, specified files are added     // to the root of the disc only.     //      isoTrack.RootFolder.Files.Add(file);    }   }  }  /// <summary></summary>  /// This function is used to recursively add the path to the supplied  /// parent NeroFolder. Add by Cola 2008-4-14  ///   /// <param name="folderParent">  /// <param name="sPath">  private void AddFolderRecursively(ref NeroFolder folderParent, string sPath)  {   NeroFolder folder = new NeroFolderClass();   folderParent.Folders.Add(folder);   string[] sSplits = sPath.Split(new char[] { '//' }, sPath.Length);   if (sSplits.GetLength(0) >= 2)   {    string sFolderName = sSplits[sSplits.GetLength(0) - 2];    folder.Name = sFolderName;    string[] sDirectories = Directory.GetDirectories(sPath);    foreach (string sSubDirPath in sDirectories)    {     AddFolderRecursively(ref folder, sSubDirPath + "http://");    }   }   string[] sFiles = Directory.GetFiles(sPath);   foreach (string sFile in sFiles)   {    NeroFile file = new NeroFileClass();    file.SourceFilePath = sFile;    file.Name = Path.GetFileName(sFile);    file.EntryTime = Directory.GetLastWriteTime(sFile);    folder.Files.Add(file);   }  }  #endregion }

然后,在Main函數中調用NeroBurn類的方法,Main函數的參數如下:

static int Main(string[] args) {    string driverletter; //驅動器盤符,含':'號    string burnpath;  //刻錄文件目錄    string discvol;  //光盤卷標    if (args.Length == 3)    {     driverletter = args[0];     burnpath = args[1];     discvol = args[2];     NeroBurn b = new NeroBurn(driverletter, burnpath, discvol);     int ret = b.Burn();     return ret;    }    return -1;

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97不卡在线视频| 亚洲乱码一区av黑人高潮| 国产精品h片在线播放| 韩国v欧美v日本v亚洲| 久久久噜噜噜久久| 欧美视频专区一二在线观看| 中文字幕视频一区二区在线有码| 久久99视频免费| 精品magnet| 日韩人体视频一二区| 欧美三级xxx| 亚洲香蕉成视频在线观看| 国产精品久久久久久久av电影| 97精品视频在线| 久久香蕉国产线看观看av| 亚洲视频一区二区| 国产一区二区三区在线观看视频| 国产精品一区二区三区在线播放| 精品亚洲一区二区三区在线观看| 中文字幕日本精品| 日韩精品在线电影| 欧美一级片久久久久久久| 国产精品久久一区| 精品国产依人香蕉在线精品| www.国产精品一二区| 成人免费在线视频网站| 亚洲精品黄网在线观看| 狠狠色狠狠色综合日日小说| 中文字幕精品影院| 这里只有精品久久| 精品美女国产在线| 国产一区二区在线播放| 国产精品盗摄久久久| 在线播放精品一区二区三区| 午夜精品久久久久久久99热| 91视频免费在线| 欧美日韩亚洲成人| 亚洲国产成人av在线| 激情成人在线视频| 538国产精品视频一区二区| 日本精品一区二区三区在线| 久久久国产一区二区| 欧美一级淫片丝袜脚交| 国产精品18久久久久久首页狼| 色偷偷偷综合中文字幕;dd| xxxxx91麻豆| 欧美精品免费看| 欧美精品成人91久久久久久久| 亚洲成人久久一区| 最新国产精品拍自在线播放| 国产精品视频白浆免费视频| 国产suv精品一区二区| 国产成人精品午夜| 91精品国产免费久久久久久| 久久久久久久一| 成人自拍性视频| 日韩欧美精品网站| 亚洲高清一区二| 欧美午夜精品久久久久久浪潮| 国产99久久久欧美黑人| 亚洲人成在线播放| 久久国产精品久久久久| 91精品国产91久久久久久吃药| 亚洲欧洲在线播放| 国产精品久久久久久av下载红粉| 午夜精品理论片| 91亚洲国产成人精品性色| 欧美国产极速在线| 欧美最顶级的aⅴ艳星| 性欧美视频videos6一9| 欧美成人免费播放| 欧美日韩电影在线观看| 国产69久久精品成人| 久久综合免费视频影院| 国产一区二区三区日韩欧美| 欧美视频在线观看免费网址| 91tv亚洲精品香蕉国产一区7ujn| 69国产精品成人在线播放| 大桥未久av一区二区三区| 亚洲国产精品推荐| 国产精品久久色| 亚洲色图第三页| 欧美成人精品一区| 久久精品国产精品| 亚洲色图25p| 国产精品96久久久久久| 亚洲一区美女视频在线观看免费| 亚洲欧美自拍一区| 国产视频观看一区| 亚洲一区二区三区xxx视频| 亚洲欧美成人精品| 欧美日韩亚洲一区二| 91色在线观看| 精品国产拍在线观看| 亚洲欧美日本另类| 午夜精品蜜臀一区二区三区免费| 国外成人性视频| 91精品国产91久久久久久| 亚洲国产精品高清久久久| 久久福利视频网| 亚洲欧美中文字幕在线一区| 日韩av网站电影| 欧美国产日韩xxxxx| 亚洲第一网站免费视频| 欧美性色xo影院| 欧美激情亚洲激情| 欧美成人精品不卡视频在线观看| 色伦专区97中文字幕| 色噜噜狠狠狠综合曰曰曰| 久久久人成影片一区二区三区观看| 69久久夜色精品国产69| 亚洲在线视频福利| 91在线无精精品一区二区| 中文字幕日韩av综合精品| 日韩av综合中文字幕| www.亚洲一二| 97成人精品视频在线观看| 欧美成人四级hd版| 日韩女在线观看| 国产精品久久久久久久久久久久| 国产成人精品一区二区在线| 亚洲一区二区中文字幕| 日韩亚洲成人av在线| 亚洲精品99久久久久| 日韩黄在线观看| 91高清免费视频| 欧美做受高潮1| 91午夜理伦私人影院| 国产一区二区美女视频| 国产精品av免费在线观看| 欧美性感美女h网站在线观看免费| 日韩黄色高清视频| zzijzzij亚洲日本成熟少妇| 国产精品爽黄69天堂a| 亚洲欧美国产日韩天堂区| 热久久这里只有精品| 色樱桃影院亚洲精品影院| 一区二区av在线| 精品久久久久久亚洲精品| 亚洲a级在线播放观看| 国产一区二区丝袜| 韩国三级日本三级少妇99| 日韩成人在线播放| 亚洲午夜未满十八勿入免费观看全集| 国产精品91在线| 日韩中文字幕视频在线| 国产成人精品一区二区| 欧美—级a级欧美特级ar全黄| 不卡av在线网站| 国产欧美精品一区二区| 九九久久久久久久久激情| 欧美中文字幕精品| 亚洲电影免费观看高清完整版在线观看| 国产精品视频xxxx| 日本久久久久久久久久久| 清纯唯美亚洲激情| 国产精品女人网站| 日韩av免费一区| 亚洲福利在线观看| 欧美激情喷水视频| 欧美成人h版在线观看| 两个人的视频www国产精品| 亚洲精品久久久久国产| 亚洲午夜国产成人av电影男同|