从不工作的文件中读取字符串 C++

Posted

技术标签:

【中文标题】从不工作的文件中读取字符串 C++【英文标题】:Read string from a file not working C++ 【发布时间】:2014-10-21 12:40:53 【问题描述】:

我在 C++ 中有这段代码:

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

using namespace std;

int main()
  string str;
  ifstream file("file.txt");
  file >> str;
  cout << str;
  return 0;

我有file.txtmain.cpp 在同一目录中。我没有得到任何输出,我尝试指定文件的完整文件路径但仍然没有结果,并且也在几台不同的机器上尝试过。 有人知道我做错了什么吗?

【问题讨论】:

file.txt 应该在工作目录中。 您使用什么操作系统?这与您需要编写完整路径的方式有关 @MariusBancila 我试过“~/cpp/filetest/file.txt”应该没问题?如果没有,我应该把这个文件放在哪里? @user2407413,我想,默认情况下终端工作目录是你的可执行文件所在的目录 @Ivan,不,工作目录是您在终端中更改的目录,而不是可执行文件所在的目录。如果我运行/bin/ls,则工作目录不是/bin 【参考方案1】:

您感兴趣的是您的程序的current working directory,即如果您没有使用完整或相对路径限定文本文件应该在哪里。

您可以在运行时使用 getcwd (linux) 或 _getcwd (windows) 获取它。

编辑:我同意安迪的观点,无论如何你都应该在打开文件时检查错误。您本可以更早发现这一点(即找不到文件),例如

(前面的伪代码用于说明目的)

#include <unistd.h>

// Warning: linux-only, use #ifdefs and _getcwd for windows OS
std::string get_working_path() 
    char cwd[1024];
    if (getcwd(cwd, sizeof(cwd)) != NULL)
        return std::string(cwd);
    else
        return std::string("");


int main() 
    std::string str;
    std::ifstream file("file.txt"); 
    if (file >> str)
        std::cout << str;
    else 
        std::cout << "File not found in cwd: " << get_working_path();
        // abort
    
    // ...

【讨论】:

搭载,OP 应该检查文件是否成功打开。这会更早地暗示路径存在问题:ifstream file("file.txt"); if (file &gt;&gt; str) cout &lt;&lt; str; else cout &lt;&lt; "Bad path\n"; 在 *** 上向 iostreams 提问的人从不在他们的代码中检查错误。令人沮丧。他们的老师应该被大棍子打。 这很棒。 SO上这些问题的答案很少提供代码,显示 OP当前工作目录是什么(因此,他们误解了什么)。 @JonathanWakely 我使用 file.is_open() 先检查然后对文件执行操作,但为了提问,我简化了代码。所以不用太担心,我想我的老师们应该很安全:)

以上是关于从不工作的文件中读取字符串 C++的主要内容,如果未能解决你的问题,请参考以下文章

使用 Boost [C++] 将 http 文件内容读取到字符串

C++ 从文本文件中逐字读取单词或逐字符读取单词

从 C++ / Unix 中的字符串读取 XML [关闭]

如何在 C++ 中将文件中的段落作为单个字符串读取

如何从 C++ 文件中读取字符串和相应的 int?

C++ 从文件中读取字符串给出“-9.25596e+61”