2016-03-15 82 views
2

fstream的open()是否採用相對或絕對文件路徑?下面是示例代碼 -fstream open()中的相對路徑Mac OS X不起作用

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 


int main() { 
    fstream myfile; 

    myfile.open("subd/example.txt"); 
    if(myfile.is_open()) { 
      for(int i = 0; i < 10; i++) { 
        myfile << "Example data " << i << endl; 
      } 
    } else cout << "Unable to open " << endl; 
    myfile.close(); 
    return 0; 
} 

我在MAC OS X環境下工作。該子目錄已經存在。 .open()爲這些情況中的每一個返回false。我也使用-std = C++ 11。我如何解決這個問題? 爲「詞表」目錄的權限是:

enter image description here

輸出始終是「無法打開」。 原帖(本帖標記爲重複帖)的解決方案無法解決我的問題。

解決方案,因爲沒有低於完全的答覆解決我的問題

使用ofstream的使用相對路徑(相對於的 程序中的位置可執行即的argv [ 0])。 fstream似乎不會以相同的方式工作 。

+1

它採取任何你給它的路徑。以「/」開頭的路徑是絕對的,所有其他路徑都是相對的(到當前工作目錄)。 – molbdnilo

+0

例2是假的。它是「子目錄/ example.txt」。 其他人應該工作。您在其中一個涉及的目錄中缺少+ r權限,或者您只是輸入了錯字。 – kamikaze

+0

我已經添加了一個更清晰的例子。其他用戶是否也需要寫入權限? –

回答

0

fstream的open()是否採用相對或絕對文件路徑?

是的。

如果相對那麼它是相對於呼叫環境的current working directory

請注意,這可能不是您的源代碼在磁盤上的位置。

+0

當我放入絕對路徑時它不起作用。 (從根目錄到子目錄)。我的意思是爲什麼必須知道調用環境的工作目錄?如果當前工作目錄與argv [0]關聯,那麼在我的情況下也不起作用。像「./subd/example.txt」 –

+0

@KartikYadav:'subd/example.txt'這不是絕對路徑。 –

+0

我知道。但是像這樣的「/home/kartik/Downloads/P4/subd/example.txt」或「〜/ Downloads/P4/subd/example.txt」也不行。 is_open()的值仍然是false。 –