std::ifstream 无法打开文件?

问题描述 投票:0回答:1

我正在使用 C++ 为我的实验室工作编写一个程序。但我有一个第一次看到的奇怪问题。我无法使用

ifstream::open
方法打开我的文本文件。

这个简单的代码也不起作用:

int main() {
    ifstream file;
    file.open("numbers.txt");
    if (file.is_open())
        cout << "fstream.open(c:\\numbers.txt): it's ok." << endl;
    else
        cout << "fstream.open(c:\\numbers.txt): error: can't open this file." << endl;
    // output: fstream.open(c:\\numbers.txt): error: can't open this file.
    file.close();
    return 0;
}

这不是编译器错误,但程序无法打开文本文件。该文件存在,但我无法从我的程序中打开它。我尝试将其移至“C:/”和“/x64/Debug”,但没有帮助。

我尝试在 Linux 上用 g++ 编译它,一切正常。在 Windows 中,我可以使用记事本打开该文件,但我的程序无法打开它。可能出什么问题了?

c++ relative-path ifstream working-directory
1个回答
0
投票

正如评论中的某人所说,您正在使用相对路径。尝试使用以下命令检查可执行文件正在运行的位置:

std::filesystem::path cwd = std::filesystem::current_path();
std::cout << "Current path is: " << cwd << "\n";

如果您的文件不存在于该目录中,请尝试使用文件的实际路径,例如:

"D:/documents/numbers.txt"
。另外,您可以使用
ifstream
的构造函数直接打开文件,而无需使用
ifstream::open()
方法,如下所示:

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

文件可以通过

std::getline()
函数读取,如下所示:

std::string line;
while(getline(file, line))
{
    std::cout << line << "\n";
}

getline
函数读取文件行直到有剩余并将其保存在每次循环执行时输出的字符串中。请注意,此处由于
std::getline
(依赖于参数的查找)而调用
ADL
时未写入命名空间名称。

std::fstream
也是一种操作文件的好方法,仅在一个类中提供读写功能。使用
fstream
读取文件看起来像这样:

std::fstream file("numbers.txt", std::ios::in);
std::string line;
while(getline(file, line))
{
    std::cout << line << "\n";
}

std::ios::in
表示流将用于读取,
std::ios::out
表示它将用于写入文件。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.