2014-01-06 70 views
2

我最近有一個應用程序在iPhone文件系統中的目錄上執行遞歸樹遍歷。我意識到當我的路徑以///開頭時,有些目錄會給我一個不同的輸出。例如:讀取以單斜槓或雙斜槓開始的文件路徑的差異

/private/var/mobile/Applications/<Unique String>/smth.txt 

會給我不可讀不可寫

//private/var/mobile/Applications/<Unique String>/smth.txt 

會給我可寫

與單斜線或雙斜線有什麼不同?我已經在網上閱讀,2之間應該沒有區別。但是,爲什麼我會得到不同的結果。我使用access()調用來獲取文件/目錄的可訪問性。

//check read access 
rval = access (path, R_OK); 
if (rval == 0) 
    printf ("%s is readable\n", path); 
else 
    printf ("%s is not readable (access denied)\n", path); 

//check write access 
rval = access (path, W_OK); 
if (rval == 0) 
    printf ("%s is writable\n", path); 
else 
    printf ("%s is not writable\n", path); 

編輯
我意識到,這會給我不可讀和不可寫的時候有我的路徑之後的額外斜槓如

/private/var/mobile/Applications/<Unique String>/smth.txt/ 

這條小路後,一個額外的斜線使有什麼不同?

+0

當您添加更多斜槓時會發生什麼? –

+0

好吧,如果我添加更多斜線,它會給我與雙斜線相同的結果 – user2541163

回答

0

當你意識到這不應該發生(可能不是)。 access可能因文件權限之外的其他原因而失敗,因此明智的第一步是更改代碼以顯示在errno中返回的錯誤。可能有一個簡單的解釋,例如,額外的斜槓讓你通過PATH_MAX或類似的。

int rval; 

//check read access 
rval = access (path, R_OK); 

if (rval == 0) 
    printf ("%s is readable\n", path); 
else 
{ 
    perror("access read"); 
    printf ("%s is not readable (access denied)\n", path); 
} 

//check write access 
rval = access (path, W_OK); 

if (rval == 0) 
    printf ("%s is writable\n", path); 
else 
{ 
    perror("access write"); 
    printf ("%s is not writable\n", path); 
} 
相關問題