2011-04-28 77 views
0

我試圖從google找到答案,但我失敗了。
我對python很熟悉,我們可以通過「os.path.sep」來檢查平臺特定的目錄分隔符。如何檢查XPCOM組件中的目錄分隔符

XPCOM組件中是否存在可以指示路徑分隔符的方法或常量?
或者有沒有一種方法來規範特定於平臺的路徑?

例如,用戶輸入下窗口中的文件路徑:C:/path1/path2/test.txt
使用了nsILocalFile ::使用initWithPath會拋出異常,如果我不做的路徑平臺有效。有效的路徑應該是「C:\ path1 \ path2 \ test.txt」。所以我想知道有辦法讓路徑有效並且可以啓動nsILocalFile。

+0

你能詳細說明**爲什麼**你想知道目錄分隔符嗎? nsiFile有一個[append](https://developer.mozilla.org/en/nsIFile#append%28%29)函數,它抽象出os路徑 – skabbes 2011-04-28 05:53:06

+0

是的,我知道這個函數,但是有一些特殊情況需要分割某些用戶輸入的文件路徑。如果我們可以知道平臺特定的路徑分隔符以進一步處理用戶輸入路徑,那將會非常有幫助。 – winterTTr 2011-04-28 06:06:52

+0

您可能可以構建一個nsIFile(用於任意文件)並將其路徑與其父路徑進行比較。我認爲這應該工作。 – skabbes 2011-04-28 14:51:42

回答

0

您可以將nsIIOService.newURI與file:// URI一起使用,然後獲取一個nsIFileURL對象,從中可以獲得一個nsIFile對象。您可以從nsIFile對象獲取路徑信息。

+0

是的,你的想法有點有用,但不符合我的要求。我使用諸如「Components.classes [」@ mozilla.org/network/io-service; 1「] .getService(Components.interfaces.nsIIOService).newURI('file:/// root/test \\ test1.txt',null,null).path「,結果是」/root/test%5Ctest.txt「,但不是」/root/test/test.txt「。 – winterTTr 2011-04-29 05:34:13

+0

那麼,爲什麼混合使用斜槓分隔符的反斜槓分隔符?您正在構建的URL指向文件夾/ root下名爲「test \ test1.txt」的文件,而不是位於/ root/test下的test1.txt。路徑屬性的值反映了這一點。 – ehsan 2011-05-16 13:40:30

2
/** 
* Returns file path separator under current OS 
*/ 
function getPathSeparator() 
{ 
    var profD = Components.classes["@mozilla.org/file/directory_service;1"]. 
       getService(Components.interfaces.nsIProperties). 
       get("ProfD", Components.interfaces.nsIFile); 
    profD.append("abc"); 
    profD.append("abc"); 
    var length = profD.path.length; 
    return profD.path.substr(length-("abc".length)-1,1); 
}