无法使用 fstream 打开文件

Not able to open file using fstream

提问人:Christian Galdi 提问时间:9/19/2023 最后编辑:Christian Galdi 更新时间:9/19/2023 访问量:56

问:

我想我可能没有在正确的位置读取我试图读取的文件,但我已将其放在 IDE 中的任何可能位置,但它仍然无法正常工作。我甚至把它放在我的程序的.exe旁边,但它仍然找不到它。

在此处输入图像描述

我希望该文件能够打开,以便我可以使用 c++ 代码读取其内容。

#include <iostream>
#include <fstream>       
#include <cstdlib>  // exit prototype
#include <iomanip>

using namespace std;

int main(int argc, char* argv[])
{
    ifstream inFile;
    string filename = "infile6";
    // if a filename is provided, open file
    cout << "Enter the name of a file to read from: " << endl;
    //cin >> filename;
    cout << "Name of a file requested: " << filename << endl;

    inFile.open(filename.c_str());
    if (!inFile)
    {
        cerr << endl;
        cerr << "File cannot be opened" << " " << filename << endl;
        exit(1);
    }

    return 0;  // ifstream destructor closes file

} // end main
C++ 可视化工作室 -2022 fstream

评论

0赞 Christian Galdi 9/19/2023
是的,我知道我没有“infile1”文件,但“infile2”也发生了同样的“文件无法打开”。
1赞 Thomas Matthews 9/19/2023
编写一个写入文件的小“Hello World”。运行它。现在找到文件。如果未指定路径(或者它是相对路径的起始位置),则这是默认位置。
1赞 Remy Lebeau 9/19/2023
您正在尝试使用相对路径打开文件。很有可能,程序的当前工作目录没有引用您认为它在运行时的位置。正是出于这个原因,请始终使用绝对路径打开文件。您可以使用或等效项来查看 CWD 实际指向的位置。std::file_system::current_path()
0赞 Christian Galdi 9/19/2023
创建文件帮助我找到了我应该放置我尝试读取的文件的位置。文件现在打开。谢谢!此外,或者我的任务是,我们需要使用相对路径,以便他的软件可以运行该程序。
0赞 dimich 9/19/2023
从 C++11 开始,您可以在不将名称转换为 C 样式字符串的情况下进行创建:inFilestd::stringstd::ifstream inFile(filename)

答:

1赞 neg-c 9/19/2023 #1

使用 Visual Studio 创建的项目的默认位置为:

C:\Users\%USERNAME%\Documents\Visual Studio 2022\Projects

替换为您的版本Visual Studio 2022

二进制文件位于该目录树的深处

最有可能 :

C:\Users\%USERNAME%\Documents\Visual Studio 2022\Projects\RA2\Debug\RA2.exeC:\Users\%USERNAME%\Documents\Visual Studio 2022\Projects\RA2\Debug\RA2.exe

RA2/
    ├── RA2.sln
    ├── RA2.vcxproj
    ├── RA2.vcxproj.filters
    ├── Debug/
    │   └── RA2.exe
    ├── Source Files/
    │   └── main.cpp
    ├── Header Files/
    │   └── ...
    ├── Resource Files/
    │   └── ...
    └── ...

现在,您的程序期望文件位于同一位置 目录作为你的 executable()。infile6C:\Users\%USERNAME%\Documents\Visual Studio 2022\Projects\RA2\Debug\

您可以将文件复制/粘贴到该目录中,也可以提供 .infile6

下面是假定用户名和 Visual Studio 版本的绝对路径Bob2022

string filename = "C:\\Users\\Bob\\Documents\\Visual Studio 2022\\Projects\\RA2\\Source Files\\infile6";

P.S 如果您使用 C++17,您应该利用 std::filesystem 来处理文件路径,它更干净、更安全、更现代。