2013-02-08 56 views
0

我有下面的代碼片段:如何通過C#進程類來解析unc路徑?

private XDocument CreateXmlForMediaFile(string mediaFilePath) 
    { 
     var args = string.Format("-f {0} --Output=XML", mediaFilePath); 

     var miProcess = new Process 
     { 
      StartInfo = new ProcessStartInfo() 
      { 
       Arguments = args, 
       FileName = _mediaInfoPath, // path to where MediaInfo.exe is located. 
       RedirectStandardOutput = true, 
       CreateNoWindow = true, 
       UseShellExecute = false 
      } 
     }; 
     // create and instantiate a new xdocument that contains our results for the current manifest. 
     miProcess.Start(); 
     var newXDoc = XDocument.Load(miProcess.StandardOutput); 

     return newXDoc; 
    } 

每當

mediaFilePath =本地路徑=完全成熟的XML文檔返回。

e.g C:\ TEMP \輸入\ ABC001.mp3

mediaFilePath = UNC路徑,某處的服務器上=返回空的XML文檔。

如\\ W2K-testharness \ SAMI TESTDATA \ CarrierBased \ ABC001.mp3

所以基本上什麼,從我可以告訴這裏發生的是,當的MediaInfo通過工藝對象在C#中推出後,沒有正確解析網絡路徑,因爲當媒體文件是本地的時候,返回一個大的xml文檔,如果這個文件不是本地的,那麼我們會得到一個空的xml文檔。

最後,我使用File.Exists(...)來驗證每個文件是否存在。

回答

0

原來這是UNC路徑中空格的一個簡單情況 - = |

c#代碼是健全的。事實證明,如果您通過應用程序(即c#命令行應用程序,內部或不是)訪問網絡資源,並且您的UNC路徑作爲參數傳入。 如果路徑中有空格,它應該用雙引號括起來。

否則沒有雙引號,您的路徑作爲參數傳入或在某處傳入硬編碼值,但不得在其中有任何空格!否則它將無法工作。

+0

你永遠不應該通過一個不帶引號的路徑作爲參數。避免使用引號是將錯誤引入程序的好方法。如果你設法使你的程序工作而不通過這些引號,那麼考慮你自己是幸運的。 – Onkelborg 2013-02-11 14:15:10