国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2019-10-29 21:40:19
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C#調用Nero SDK刻錄光盤的方法,涉及C#調用NeroCOM組件實現光盤刻錄的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下

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

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

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

 

 
  1. public class NeroBurn 
  2. #region 屬性 
  3. private NeroDrive m_neroDerive; 
  4. private Nero m_nero; 
  5. private bool m_aborted; 
  6. private string m_burnPath; 
  7. private bool m_isDoneBurn; 
  8. private int m_returnCode;//0:失敗;1:成功;-1:未知 
  9. private string m_discvol; 
  10. //nero 委托 
  11. private _INeroDriveEvents_OnDoneBurnEventHandler m_evOnDoneBurn; 
  12. private _INeroDriveEvents_OnAddLogLineEventHandler m_evOnAddLogLine; 
  13. private _INeroEvents_OnWaitCDEventHandler m_evOnWaitCD; 
  14. private _INeroDriveEvents_OnAbortedEventHandler m_evOnAborted; 
  15. private _INeroDriveEvents_OnProgressEventHandler m_evOnProgress; 
  16. private _INeroEvents_OnWaitCDDoneEventHandler m_evOnWaitCDDone; 
  17. #endregion  
  18. #region 構造函數 
  19. /// <summary></summary> 
  20. /// 構造函數 
  21. ///  
  22. /// <param name="driverletter">盤符 
  23. /// <param name="burnpath">待刻錄的文件路徑 
  24. /// <param name="discvol">盤的卷標 
  25. public NeroBurn(string driverletter,string burnpath,string discvol) 
  26. m_burnPath = burnpath; 
  27. m_nero = new NeroClass(); 
  28. m_neroDerive = allocDevice(driverletter); 
  29. m_aborted = false
  30. m_isDoneBurn = false
  31. m_discvol = discvol; 
  32. #endregion  
  33. #region Nero事件處理 
  34. /// <summary></summary> 
  35. /// 發起刻錄事件 
  36. ///  
  37. /// <param name="bSubscribe"> 
  38. private void SubscribeToEvents(bool bSubscribe) 
  39. if (bSubscribe) 
  40. m_evOnAddLogLine = new _INeroDriveEvents_OnAddLogLineEventHandler(m_drive_OnAddLogLine); 
  41. m_neroDerive.OnAddLogLine += m_evOnAddLogLine; 
  42. m_evOnWaitCD = new _INeroEvents_OnWaitCDEventHandler(m_nero_OnWaitCD); 
  43. m_nero.OnWaitCD += m_evOnWaitCD; 
  44. m_evOnDoneBurn = new _INeroDriveEvents_OnDoneBurnEventHandler(m_drive_OnDoneBurn); 
  45. m_neroDerive.OnDoneBurn += m_evOnDoneBurn; 
  46. m_evOnWaitCDDone = new _INeroEvents_OnWaitCDDoneEventHandler(m_nero_OnWaitCDDone); 
  47. m_nero.OnWaitCDDone += m_evOnWaitCDDone; 
  48. m_evOnProgress = new _INeroDriveEvents_OnProgressEventHandler(m_drive_OnProgress); 
  49. m_neroDerive.OnProgress += m_evOnProgress; 
  50. else 
  51. {  
  52. m_neroDerive.OnAddLogLine -= m_evOnAddLogLine; 
  53. m_nero.OnWaitCD -= m_evOnWaitCD; 
  54. m_nero.OnWaitCDDone -= m_evOnWaitCDDone; 
  55. m_neroDerive.OnDoneBurn -= m_evOnDoneBurn; 
  56. m_neroDerive.OnProgress -= m_evOnProgress; 
  57. private void m_drive_OnProgress(ref int ProgressInPercent, ref bool Abort) 
  58. // This events gives us an opportunity to show progress 
  59. // as well as abort if needed. 
  60. //  
  61. Abort = m_aborted;  
  62. Console.WriteLine("光盤" + m_discvol + " " + ProgressInPercent.ToString() + "% had Burned!!"); 
  63. //c_TaskPercent.Text = ProgressInPercent.ToString() + "%"; 
  64. private void m_nero_OnWaitCDDone() 
  65. // When waiting on a disc is done, make sure to 
  66. // enable us and hide the WaitCD form. 
  67. //  
  68. Console.WriteLine("a Disc has inserted!"); 
  69. /// <summary></summary> 
  70. ///刻錄完成,不管失敗成功!  
  71. ///  
  72. /// <param name="StatusCode"> 
  73. private void m_drive_OnDoneBurn(ref NERO_BURN_ERROR StatusCode) 
  74. // When burning is over, make sure to unsubscribe from all 
  75. // events. 
  76. //  
  77. SubscribeToEvents(false); 
  78. if (StatusCode == NERO_BURN_ERROR.NERO_BURN_OK) 
  79. m_returnCode = 1; 
  80. Console.WriteLine(m_neroDerive.DriveLetter + "盤卷標為 " + m_discvol + " 刻錄成功!!"); 
  81. else 
  82. m_returnCode = 0; 
  83. Console.WriteLine(m_neroDerive.DriveLetter + "盤卷標為 " + m_discvol + " 刻錄失敗!!"); 
  84. m_isDoneBurn = true
  85. Console.WriteLine("Burn Finish!!"); 
  86. /// <summary></summary> 
  87. /// 如果光驅為空,等待光驅 
  88. ///  
  89. /// <param name="WaitCD"> 
  90. /// <param name="WaitCDLocalizedText"> 
  91. private void m_nero_OnWaitCD(ref NERO_WAITCD_TYPE WaitCD, ref string WaitCDLocalizedText) 
  92. Console.WriteLine("Wait CD..."); 
  93. /// <summary></summary> 
  94. /// 寫日志 
  95. ///  
  96. /// <param name="TextType"> 
  97. /// <param name="Text"> 
  98. private void m_drive_OnAddLogLine(ref NERO_TEXT_TYPE TextType, ref string Text) 
  99. Console.WriteLine( Text); 
  100. #endregion  
  101. #region 申請設備 
  102. /// <summary></summary> 
  103. /// 申請設備 
  104. ///  
  105. /// <param name="driverletter"> 
  106. /// <returns></returns> 
  107. private NeroDrive allocDevice(string driverletter) 
  108. NeroDrives drives = m_nero.GetDrives(NERO_MEDIA_TYPE.NERO_MEDIA_DVD_M); 
  109. if (drives.Count > 0) 
  110. foreach (NeroDrive d in drives) 
  111. if (driverletter.ToLower().Contains(d.DriveLetter.ToLower())) 
  112. return d; 
  113. return null
  114. #endregion  
  115. #region 刻錄 
  116. /// <summary></summary> 
  117. /// 刻錄 
  118. ///  
  119. /// <returns></returns>0: 失敗;1:成功;-1:未知錯誤 
  120. public int Burn() 
  121. m_isDoneBurn = false;  
  122. SubscribeToEvents(true); 
  123. NeroISOTrack isoTrack = new NeroISOTrackClass(); 
  124. isoTrack.BurnOptions = (NERO_BURN_OPTIONS)((uint)NERO_BURN_OPTIONS.NERO_BURN_OPTION_CREATE_ISO_FS + (uint)NERO_BURN_OPTIONS.NERO_BURN_OPTION_USE_JOLIET); 
  125. isoTrack.Name = m_discvol; 
  126. Console.WriteLine("Begin AddFilesAndFoldersToISOTrack."); 
  127. AddFilesAndFoldersToISOTrack(ref isoTrack, m_burnPath); 
  128. Console.WriteLine("End AddFilesAndFoldersToISOTrack."); 
  129. if (isoTrack.RootFolder.Files.Count == 0 && 
  130. isoTrack.RootFolder.Folders.Count == 0) 
  131. isoTrack = null
  132. return 0; 
  133. NERO_BURN_FLAGS flags = new NERO_BURN_FLAGS(); 
  134. flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE; 
  135. flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_CLOSE_SESSION; 
  136. flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_BUF_UNDERRUN_PROT; 
  137. flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DISABLE_ABORT; 
  138. flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DAO; 
  139. flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_CD_TEXT; 
  140. flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DETECT_NON_EMPTY_CDRW; 
  141. flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_SPEED_IN_KBS;  
  142. try 
  143. if (null == m_neroDerive) 
  144. Console.WriteLine("m_neroDerive is null!!"); 
  145. return -1; 
  146. int speed = 10000; 
  147. string BurnSpeed_s = System.Configuration.ConfigurationSettings.AppSettings["BurnSpeed"]; 
  148. if (!string.IsNullOrEmpty(BurnSpeed_s)) 
  149. speed = int.Parse(BurnSpeed_s); 
  150. m_neroDerive.BurnIsoAudioCD(""""false
  151. isoTrack, 
  152. null
  153. null
  154. flags, 
  155. speed, 
  156. NERO_MEDIA_TYPE.NERO_MEDIA_DVD_M); 
  157. //循環執行,等待刻錄完成 
  158. while (true
  159. if(m_isDoneBurn) //如果刻錄完成 
  160. return m_returnCode; 
  161. System.Threading.Thread.Sleep(1000); 
  162. catch (Exception e) 
  163. m_aborted = true
  164. Console.WriteLine("Burn Error : "+e.Message); 
  165. return 0; 
  166. return -1; 
  167. #endregion  
  168. #region 輔助函數 
  169. /// <summary></summary> 
  170. /// This function adds the files and folders to the supplied NeroISOTrack. 
  171. /// Add by Cola 2008-4-14 
  172. ///  
  173. /// <param name="isoTrack"> 
  174. /// <param name="discPath"> 
  175. private void AddFilesAndFoldersToISOTrack(ref NeroISOTrack isoTrack, string discPath) 
  176. string sPath = discPath; 
  177. // The string should really not be empty... 
  178. //  
  179. if (sPath != ""
  180. // If path ends in a backslash, it is a folder. 
  181. //  
  182. if (sPath[sPath.Length - 1] == '//'
  183. NeroFolder folder = isoTrack.RootFolder; 
  184. AddFolderRecursively(ref folder, sPath); 
  185. else 
  186. // This is a file. Create a new NeroFile 
  187. // change its properties. 
  188. //  
  189. NeroFile file = new NeroFileClass(); 
  190. file.SourceFilePath = sPath; 
  191. file.Name = Path.GetFileName(sPath); 
  192. file.EntryTime = Directory.GetLastWriteTime(sPath); 
  193. // In this implementation, specified files are added 
  194. // to the root of the disc only. 
  195. //  
  196. isoTrack.RootFolder.Files.Add(file); 
  197. /// <summary></summary> 
  198. /// This function is used to recursively add the path to the supplied 
  199. /// parent NeroFolder. Add by Cola 2008-4-14 
  200. ///  
  201. /// <param name="folderParent"> 
  202. /// <param name="sPath"> 
  203. private void AddFolderRecursively(ref NeroFolder folderParent, string sPath) 
  204. NeroFolder folder = new NeroFolderClass(); 
  205. folderParent.Folders.Add(folder); 
  206. string[] sSplits = sPath.Split(new char[] { '//' }, sPath.Length); 
  207. if (sSplits.GetLength(0) >= 2) 
  208. string sFolderName = sSplits[sSplits.GetLength(0) - 2]; 
  209. folder.Name = sFolderName; 
  210. string[] sDirectories = Directory.GetDirectories(sPath); 
  211. foreach (string sSubDirPath in sDirectories) 
  212. AddFolderRecursively(ref folder, sSubDirPath + "//"); 
  213. string[] sFiles = Directory.GetFiles(sPath); 
  214. foreach (string sFile in sFiles) 
  215. NeroFile file = new NeroFileClass(); 
  216. file.SourceFilePath = sFile; 
  217. file.Name = Path.GetFileName(sFile); 
  218. file.EntryTime = Directory.GetLastWriteTime(sFile); 
  219. folder.Files.Add(file); 
  220. #endregion  

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

 

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇赉县| 改则县| 三门峡市| 德昌县| 太仆寺旗| 宣恩县| 江川县| 桃园市| 余干县| 张北县| 静海县| 紫金县| 平远县| 巴林右旗| 庆阳市| 始兴县| 英超| 锡林浩特市| 萨迦县| 广平县| 崇文区| 六安市| 北碚区| 苍溪县| 保康县| 新泰市| 延寿县| 乌兰浩特市| 西华县| 巴林左旗| 定日县| 大安市| 万山特区| 宁国市| 高陵县| 武清区| 齐齐哈尔市| 陇川县| 德钦县| 石台县| 司法|