關於使用 ProcessStartInfo 類時的文件目錄包含空格問題的解決方法


  前段時間項目中使用7-zip壓縮生成EPUB文件(2.01),但通過 EPUB-Checker.exe 軟件檢測發現 mimetype 文件不是第一個歸檔文件,經過對比懷疑7z中有自己默認的歸檔順序,遂改用 winrar.exe 進行壓縮(項目采用C#編寫,通過CMD執行壓縮命令),壓縮步驟為:

  1、壓縮 mimetype 文件,命令:

    "C:\Program Files\WinRAR\winrar.exe"  a -ep1 C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\epub.zip C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\mimetype 

    其中:C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\ 為文件存放目錄

  2、壓縮 OPS 目錄,命令:

    "C:\Program Files\WinRAR\winrar.exe"  a -ep1 C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\epub.zip C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\OPS

  3、壓縮 META-INF 目錄,命令:

    "C:\Program Files\WinRAR\winrar.exe"  a -ep1 C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\epub.zip C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\META-INF

  按照這樣的步驟執行了一下,以為會成功,但實際發現在一般情況下確實沒問題,在XP系統上總報找不到某個文件,細看才發現是因為壓縮文件(無論源文件和目標文件)中包含有空格時會被截斷並當成幾個但單獨的命令參數,仔細一想就釋然了(你包含空格控制台當然無法知道你想輸入的是什么,這不是控制台的問題,更不是rar的問題)。

  找到了原因開始摸索着解決它,發現無論是在命令上整體加引號還是直接取出空格,或是給空格加引號都不行,廢了一些時間后想起了我們的好盆友度娘,通過度娘找到CSDN的@hufeikong君,此君早在10年就遇到這樣的問題經大家合力找到了一下解決方案:

    string command = @"""C:\Program Files\WinRAR\winrar.exe""  a -ep1 ""C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\epub.zip""  ""C:\Users\Administrator\AppData\Roaming\KPP\6CA24687FFDB9DBA\Output\epub\mimetype""";
    startInfo.Arguments = @"/C (" + command + @")";

  即在把所有文件路徑單獨包含在引號內,並將命令整體包含在括號內,這樣再次執行,無論什么樣的目錄和文件名都能正常執行,問題完美解決!!

  鑒於該問題(EPUB檢測錯誤)解決之耗時及對本人的折磨之深,再此感謝度娘、CSDN、博客園以及為代碼、資料、問題等資源分享作出貢獻的人們,是你們的幫助使得更多問題得到解決!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM