2010-05-06 83 views
6

是否可以使用System.IO.Path類或某些類似的對象來格式化unix樣式的路徑,從而提供類似於PATH類的功能?例如,我可以這樣做:System.IO.Path或等效使用Unix路徑

Console.WriteLine(Path.Combine("c:\\", "windows")); 

其中顯示:

"C:\\windows" 

不過是我嘗試用正斜槓(/)類似的事情,它只是扭轉他們對我來說。

Console.WriteLine(Path.Combine("/server", "mydir")); 

其中顯示:

"/server\\mydir" 

回答

3

在這種情況下我會使用類System.UriSystem.UriBuilder

備註:如果您在Mono-Runtime的Linux系統上運行.NET代碼,則Path類應返回您的預期行爲。 Path類使用的信息由底層系統提供。

+0

謝謝你,但我找不到任何這些類中的任何方法,看起來是.Combine()的等價性? – 2010-05-06 09:35:42

+0

我沒有找到這個方法有用...需要URI格式。 UriFormatException:URI無效:無法確定URI的格式:Template/1024x768 / – 2013-08-29 06:28:46

3

你遇到了更大的問題,Unix接受文件名中的字符比Windows不允許。該代碼將與ArgumentException的轟炸,「路徑中具有非法字符」:

string path = Path.Combine("/server", "accts|payable"); 

你不能可靠地使用Path.Combine()爲Unix的路徑。

3

Path.Combine使用的Path.DirectorySeperatorCharPath.VolumeSeparatorChar的價值觀,這些都是通過在運行類庫決定 - 如果你只使用Path.Combine電話,Environment.SpecialFolder值,等等編寫代碼,將罰款到處跑,因爲Mono(大概是任何.NET運行時)都實現了爲其運行的任何平臺獲取和構建這些路徑的原生方式。 (你的第二個例子,比如,返回/server/mydir我,但第一個例子給出c:\/windows

如果你想在所有情況下的特定UNIX路徑硬編碼,Path.Combine是不買你什麼:Console.WriteLine ("/server/mydir");做什麼你想在OP中。

正如漢斯所說,不同的文件系統對允許的字符,路徑長度等有不同的規則,所以像任何跨平臺編程一樣,最佳實踐是限制自己使用您定位的文件系統。請注意大小寫敏感問題。