2016-03-15 85 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。 –