使用 fstream 从 C++ 中的 .txt 文件获取文本的问题

Posted

技术标签:

【中文标题】使用 fstream 从 C++ 中的 .txt 文件获取文本的问题【英文标题】:Problem with getting text from a .txt file in c++ using fstream 【发布时间】:2020-12-12 13:41:45 【问题描述】:

And this我正在尝试将内容写入一个名为 CodeHere.txt 的 .txt 文件,这是我的 main.cpp:

#include <iostream>
#include <fstream>
using namespace std;


int main(int argc, const char * argv[]) 
    string line;
    string lines[100];
    ifstream myfile ("CodeHere.txt");
    int i = 0;
    if (myfile.is_open())
    
      while ( getline (myfile,line) )
      
          lines[0] = line;
          i++;
          
      
      myfile.close();
    

    else cout << "Unable to open file";
    
    cout << lines[0];
    
    myfile.close();

    return 0;

输出是:将其写入文件。程序以退出代码结束:0

但在我的 CodeHere.txt 中有:你好

我尝试保存它,但结果没有改变。我不确定发生了什么事。有人可以帮忙吗?

【问题讨论】:

“输出是:将其写入文件...”。我不明白这怎么可能。请显示您正在运行的确切代码。 我把图片一张是自动显示的,另一张点击链接。 @cigien 行[i] = 行; cout 我无法复制。似乎工作fine。你确定你正在编译和运行正确的程序吗?我看不出 将其写入文件 的来源。 @Omer:是的,我相信它是文本文件。尽量不要复制和粘贴,而是自己在新的文本文件中键入 Hello,也许您的编辑器会在 ifstream 无法识别的 txt 文件中插入一些奇怪的行尾不可见符号。 【参考方案1】:

您确定您的 .txt 文件在同一个目录中吗?对我来说,看起来你输入了错误的路径。尝试使用绝对路径(完整路径)。另一种选择是你还没有保存文本文件,你只是在编辑它,所以它实际上是空的,这就是你的 cout 不打印任何东西的原因。

【讨论】:

可能是读取了错误的文件。在此之前我一直在搞乱,可能创建了一个它认为应该读取的不可见文件。当我给出完整路径时,它起作用了 @Omer: 文本文件应该在 c++ 项目的同一个文件夹中,如果你想避免必须给出 ifstream 的完整路径 @Omer 我很高兴你知道了!如果要使用相对路径,请小心。根据您的 IDE,路径最终可能相对于您的源代码(如预期的那样)或相对于编译的代码(可能不在同一目录 /!\)。【参考方案2】:

这应该可以,使用vector&lt;string&gt; 来存储从文件中读取的行

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main(int argc, const char * argv[]) 
    string line;
    vector<string> lines;
    ifstream myfile ("CodeHere.txt");
    int i = 0;
    if (myfile.is_open())
    
        while ( getline(myfile, line) )
        
             lines.push_back(line);
             i++;       
        
        myfile.close();
    
    else 
        cout << "Unable to open file";
        return -1;
    

    cout << lines[0] << '\n';

return 0;

【讨论】:

不,我认为这是一个错误,它显示的内容完全相同。文件或xcode一定有问题。还有你有没有注意到txt文件旁边有个问号,你知道这是什么意思吗? 用其他文本文件测试程序。它在我的计算机上运行良好,可以读取我尝试成功的任何 .txt 文件的任何第一行。 您的代码和 OP 的代码都只会输出读入的第一行。 如果您使用的是std::vector,则不需要i 变量。 @ThomasMatthews:你在这两种情况下都是对的,代码只会输出第一行,i 没用,但我不是作者所以我不知道这是否会以某些需要将奇怪的东西留在原处的方式使用。【参考方案3】:

试试这个:

  vector<string> lines;
  if (file.is_open()) 
    // read all lines from the file
    std::string line;
    while (getline(file, line)) 
      lines.emplace_back(line);
    
    file.close();
  
  else 
    cout << "Unable to open file";
    return -1;
  
  cout << "file has " << lines.size() << " lines." << endl;
  for (auto l : lines) 
    cout << l << endl;
   

【讨论】:

文件有 1 行。将其写入文件。程序以退出代码结束:0 仍然不起作用我将使用另一个 IDE 我认为 Xcode 有问题

以上是关于使用 fstream 从 C++ 中的 .txt 文件获取文本的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用fstream将文件逐行读取到C++中的二维向量中[重复]

c++文件流fstream中的函数

即使使用 ios::app 在 C++ 中覆盖 Fstream

C++,fstream 对象作为引用传递给函数,常量?

C++ windows fstream 区分大小写

如何使用C ++消除记事本.txt文件中的BOM? [重复]