在Mac OS X中,使用相对路径在fstream的open()函数中不起作用。

3

fstream的open()函数使用相对路径还是绝对路径?这里有一个示例代码:

#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。我该如何解决这个问题?'subd'目录的权限为: enter image description here 输出总是“无法打开”。原帖的解决方案(这篇文章被标记为重复)并不能解决我的问题。

解决方案,因为以下回答都不能完全解决我的问题

使用ofstream与相对路径(相对于程序可执行文件的位置,即argv[0])。fstream似乎无法正常工作。


1
它接受任何你给予的路径。以 "/" 开头的路径是绝对路径,而其他路径都是相对路径(相对于当前工作目录)。 - molbdnilo
例子2是错误的。它应该是“子目录/示例.txt”。其他代码都应该能够正常运行。你可能缺少其中一个目录的读取权限,或者只是打了个错字。 - kamikaze
我已经添加了一个更清晰的例子。其他用户也需要写入权限吗? - user4279406
你是在包含“subd”子目录的目录中执行此操作吗? - molbdnilo
1
打印出当前工作目录。你可能没有在你认为的文件夹中运行。 - Richard Hodges
为什么我输入绝对路径时它不起作用?(从根目录到子目录)。我的意思是,为什么必须知道调用环境的工作目录? - user4279406
1个回答

0
fstream的open()函数接受相对路径还是绝对路径?
是的。
如果是相对路径,那么它是相对于调用环境的当前工作目录。请注意,这可能不是您源代码在磁盘上的位置。

当我输入绝对路径时,它无法工作(从根目录到子目录)。我的意思是为什么必须知道调用环境的工作目录?如果当前工作目录与argv [0]相关联,则在我的情况下也无法正常工作。例如:“./subd/example.txt” - user4279406
@KartikYadav:subd/example.txt 这不是绝对路径。 - Lightness Races in Orbit
我知道。但是像这样的“/home/kartik/Downloads/P4/subd/example.txt”或“~/Downloads/P4/subd/example.txt”也不起作用。is_open()的值仍然为false。 - user4279406
@KartikYadav:那么你的程序没有读取该文件的权限。 - Lightness Races in Orbit
该文件(例如example.txt)不存在。我期望open()函数可以创建一个新的文件。该目录(例如subd)存在,并且具有我在上面提到的权限,允许所有者和组拥有rwx权限,而其他人只有rx权限。我也尝试将w权限添加给其他人,但这也没有起作用。 - user4279406

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接