2011-06-25 187 views

回答

4

嘗試path.Split('\\') ---所以單引號(字符)

使用字符串這個工程:

path.Split(new[] {"\\"}, StringSplitOptions.None) 

要使用你有一個字符串指定字符串數組。我從來沒有得到過爲什麼:)

7

有沒有string.Split重載需要一個字符串。 (另外,C#區分大小寫,因此您需要Split而不是split)。但是,您可以使用:

string bits = path.Split('\\'); 

其中將使用參數params char[]的過載。它相當於:

string bits = path.Split(new char[] { '\\' }); 

這是假設你一定要用反斜槓分割。您可能想要通過您正在運行的操作系統的目錄分隔符進行拆分,在這種情況下,Path.DirectorySeparatorChar可能是正確的方法...它將在Unix上爲/,在Windows上爲。另一方面,如果您試圖在運行在Unix上的ASP.NET頁面中解析Windows文件系統路徑,那不會對您有所幫助。換言之,這取決於您的上下文:)

另一種替代方法是使用PathDirectoryInfo上的方法以更多文件系統敏感的方式獲取有關路徑的信息。

26

您應該使用

path.Split(Path.DirectorySeparatorChar); 

,如果你試圖分裂基於本地路徑分隔符的文件路徑。

+3

嗯,這要看情況。這可能是適當的 - 它可能不是。當然,如果在非Windows上使用單聲道,它只會有所不同......在這一點上,您仍然需要知道輸入是否實際上是主機操作系統的路徑,或者是否是(例如)來自HTTP上載的文件名。 –

+0

非常正確,謝謝你指出。 – Mat

+0

此外,還有很多方便的方法,如Path.GetFileName(),Path.GetFileNameWithExtensions()等 – st78

1

在windows上,至少在Windows 7/XP中,在C#路徑函數和命令行上也接受使用正斜槓。

例如爲: 這兩個產生相同的結果對我來說:

dir "C:/Python33/Lib/xml" 
dir "C:\Python33\Lib\xml" 
(In C:) 
dir "Python33/Lib/xml" 
dir "Python33\Lib\xml" 

在Windows,既不是「/」或「\」是文件名字符有效。在Linux上,'\'在文件名中是可以的,所以如果解析兩者,你應該知道這一點。

所以,如果你想支持兩種形式的路徑(像我這樣做),你可以這樣做:

path.Split(new char[] {'/', '\\'}); 

在Linux上它可能會使用更安全Path.DirectorySeparatorChar。

0

爲了安全起見,你可以使用:

path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar });