2014-09-10 68 views
1

我正在翻譯windows上的.net應用程序到mac上的mono。我發現了一個正在發生的錯誤,我認爲這與在單聲道Mac上解釋反斜槓的方式有關。Mac上的單聲道路徑解釋是否與.net Windows版本不同?

Path.GetDirectoryName("Assembly\\file.dll") 

對於返回「Assembly」的.net窗口返回空字符串的mac的mono。這是正常的行爲嗎?我是否可以用某種配置更改路徑解析方式,或者我需要用正斜槓替換每個反斜槓?

+1

您可能需要使用平臺特定的分隔符。 http://msdn.microsoft.com/en-us/library/system.io.path.directoryseparatorchar%28v=vs.110%29.aspx – xxbbcc 2014-09-10 15:46:22

+0

@xxbbcc顯然你是對的。使用庫SharpZipLib出現問題。 ZipEntry對象只用反斜槓創建路徑,而不考慮操作系統正在運行的路徑。我想我會使用Path.DirectorySeparatorChar的值替換這些路徑。 – mjsr 2014-09-10 15:56:18

+1

用於.NET的各種庫可能不是針對Windows以外的平臺編寫的 - 我不清楚SharpZipLib的具體情況,但是如果某個庫硬編碼了特定分隔符,則它可能具有各種文件系統問題。 – xxbbcc 2014-09-10 16:19:43

回答

1

在單聲道可以使用MONO_IOMAP環境變量來忽略像路徑差(窗口是不區分大小寫,UNIX是區分大小寫),路徑分隔符(「\」 VS「/」)

看到http://www.mono-project.com/docs/advanced/iomap/

無論如何,最好的長期解決方案是使用像Path.CombinePath.DirectorySeparator這樣的方法來解決這些問題