【问题标题】:Why my C++ program can only read absolute directory but not file in the same file folder?为什么我的 C++ 程序只能读取绝对目录而不能读取同一文件夹中的文件?
【发布时间】:2014-11-30 05:27:08
【问题描述】:

我使用 VS2012 编写了一个小型 VC++ 程序并尝试读取一个文本文件。我将文件放在发布文件夹中。但是,在使用绝对文件目录之前,我无法读取该文件。虽然我在网上找不到有用的信息。代码是这样的

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

using namespace std;

int main()
{
    cout<<"Hello World!"<<endl;
    string test;
    ifstream myfile;
    myfile.open("E:\\Glus\\Project2\\Release\\bunny.txt");
    if(myfile.is_open())
    {
        string s0,s1;
        int x0, x1;
        myfile>>s0>>x0;
        cout<<s0<<x0<<endl;
        myfile>>s1>>x1;
        cout<<s1<<x1<<endl;
    }
    else
    {
        cout<<"Error in reading file!"<<endl;
    }
    myfile.close();
    cin>>test;
    return 0;
}

谢谢!

【问题讨论】:

  • 你告诉VS启动你的程序的目录是什么?这不一定与.exe 文件所在的目录相同。
  • 默认情况下 VS 使用项目文件夹作为当前目录,而可执行文件构建到 ..\Win32\Release 等。

标签: c++ io ifstream absolute-path


【解决方案1】:

Visual Studio 不会将您的程序保存在您运行它的确切位置,实际上它会将其保存在您的项目文件夹中的一个文件夹中,并与您的项目名称相同 您可以使用此命令获取当前工作路径:

system("cd");

它可以解决您查找文件的问题。

【讨论】:

  • 如果我在读取文件之前添加了它,它只会输出当前目录,但不会更改为当前发布文件夹
【解决方案2】:

路径不是相对于可执行文件,而是相对于当前目录(参见_getcwd)。

如果您是从 VC 启动应用程序,请尝试

"..\\Release\\bunny.txt"

对于现实生活中的应用程序,我建议检测可执行文件的路径并使用它来构造数据文件的路径。更可靠、更安全。

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多