C ++在另一个目录中打开.txt文件

时间:2017-05-30 11:21:36

标签: c++

我必须向我的大学教授发送一个C ++项目。

这个项目使用QWidget,c ++类和两个.txt文件作为“数据库”存储我的信息。

当我打开项目时,QList会自动填充存储在.txt文件中的数据。

问题是,如果我想让项目使用其中的数据,我必须将.txt文件放在build-directory中。

有一种方法可以将.txt文件放入存储所有.cpp和.h文件的目录中吗?

我用来打开文件的代码是:

std::ifstream in("file.txt");

但只有在文件位于build-directory中时才打开文件。我想更改项目查找文件的路径。

由于

5 个答案:

答案 0 :(得分:0)

  • 选项1:在完成操作后,需要使用SetCurrentDirectory()设置当前目录,将其恢复为旧目录,在设置当前目录之前,可以使用{获取当前目录{1}},在您的操作使用GetCurrentDirectory()重新设置后,将其保留在缓存中。

  • 选项2:您需要传递文件的整个路径(绝对路径)。

答案 1 :(得分:0)

如果您不考虑重复问题中提到的手动路径规范,我建议使用QStandardPaths这样的

auto dbFilePath = QStandardPaths::locate(QStandardPaths::AppDataLocation, "file.txt", QStandardPaths::LocateFile);

或/和QCoreApplication::applicationDirPath

使用其中一个或根据这两个逻辑编写一些逻辑来独立于当前工作目录找到您的文件。请注意,在这些情况下,您需要预安装文件,然后您可以将文件作为资源发送。

答案 2 :(得分:0)

您可以使用相对路径:../folder/file.txt

答案 3 :(得分:0)

如果像你的情况那样提供相对路径(你也可以提供像“/ etc / file”或“C:\\ Windows \\ file”这样的绝对路径),你可以使用“/”导航到子目录(或者在Windows“\\”)和“..”中导航到父目录,如“../Data/file”。有关这方面的更多信息,您可以找到here。默认情况下,工作目录(起始目录)是“exe”文件,但可以从应用程序内部和外部进行更改。但是你想要的是一个问题:

  

是一种将.txt文件放入存储所有.cpp和.h文件的目录的方法

该目录通常不包含在应用程序中,因为它只包含源代码,您可能不希望随应用程序一起提供该目录。

答案 4 :(得分:0)

假设我正在编辑的cpp文件“ 1505010.cpp”在这里:

enter image description here

我的 .txt 文件位于此处 test cases / 1 / scene.txt 。如下图所示:

enter image description here

在这种情况下,我的cpp代码应如下所示:

void readFromFile()
{
    string line;
    sceneFile.open("./test cases/1/scene.txt");
    if(sceneFile.is_open()){
        while(getline(sceneFile, line)){
            cout << line << endl;
        }
        sceneFile.close();
    }
    else {
        cout << "Unable to open file";
    }
}

使用“ /” “ \” 时要小心。在这种情况下,我们使用“ /”(正斜杠)