2013-03-29 80 views
0

我需要在一個字符串中連接幾個絕對文件路徑。 但是,如果我使用字符,這可能是文件名或路徑的一部分,字符串將被混淆。可以使用哪種分離器?在字符串中連接絕對文件路徑

現在我用File.pathSeparator和Windows 7是 ';'。 但是這個字符可以是文件名的一部分。

SO question

Semicolons are legal in NTFS file paths.

+0

使用| (管道)符號 –

+2

爲什麼不首先使用集合? –

+0

我正在考慮管道符號,但我不確定其他文件系統。 對File.pathSeparator返回';'仍然感興趣但路徑可以包含它。 –

回答

2

可以使用File.pathSeparator

與系統有關的路徑分隔符,表示爲方便起見字符串 。該字符串包含單個字符,即pathSeparatorChar

與系統相關的路徑分隔符字符。該字段爲 ,初始化爲包含系統 屬性path.separator的值的第一個字符。這個字符用於分隔作爲路徑列表給出的一系列文件中的文件名 。在UNIX系統上,這個 字符是':';在Microsoft Windows系統上它是';'。

+0

我現在使用它。但是例如Windows 7中的文件名可以有';'。 –

+1

不幸的是,雖然路徑分隔符用於分隔路徑,但是沒有什麼能夠阻止你在Unix上使用文件名中的冒號。 – Joni

+0

@YegoshinMaxim你可以檢查直到';'的路徑是否存在,如果不存在,那麼你知道它是文件名的一部分。順便說一句,我正在使用它很長一段時間,從來沒有遇到過一個名稱爲';'的文件。 – Maroun

0

的ASCII NULL字符\0不能在Windows或Unix(包括Mac)路徑名的一部分,所以你可能可以使用作爲分隔符。

NUL字符不能在文件路徑使用,因爲它是在C中的字符串終止字符,以及用於這些操作系統的API是定義爲使用字符串來表示文件路徑一個C庫。

如果你想使用一個可打印字符作爲分隔符,你將不得不使用轉義碼方案。最簡單的一種是將分隔符加倍:假設您使用#作爲分隔符;要將路徑添加到列表中,請用##替換已存在於路徑中的任何#號。

相關問題