【问题标题】:How to read the entire content of a file character by character?如何逐字符读取文件的全部内容?
【发布时间】:2013-08-03 15:35:40
【问题描述】:

有一个文件包含如下数据:

11619.
Jody rosy.
32.
north st.
1/8/2013.
52.

我想读取整个文件内容如下:

1
1
6
1
9
.

J
o
d
y

etc.

我怎样才能这样读取文件内容?

【问题讨论】:

  • 在不得不拼命寻求帮助之前,您走了多远?
  • std::ifstream fs("file.ext"); int ch = fs.get();
  • 您有没有花时间查看std::istream 的文档?
  • @LionKing - 他的意思是“显示一些代码”。你尝试了什么?
  • google : “C++ 读取文件”会很快为您提供解决方案

标签: c++ file


【解决方案1】:

我会这样做:

std::ifstream infile("myfile.txt");
char ch;
while(infile.get(ch))
{
   ... process ch ... 
}

这避免了出现在最后一个字符上的问题,或者在循环的第一次迭代之前必须读取一个字符。

【讨论】:

    【解决方案2】:

    使用std::ifstream:

    std::ifstream fs("file.ext");
    int ch = fs.get();
    
    while (fs.good()) {
        // process `ch' then
        ch = fs.get();
    }
    

    【讨论】:

    • 这不是真正的惯用语(另外,你的意思是char?)。为什么不while(fs >> ch) { /* do stuff with ch */ }
    • @Rapptz 不,我的意思是int。为什么不?因为这不依赖于ch的类型。
    • 这对我来说几乎没有意义。
    • @Rapptz 具体是什么?另外,如果您对当前的任何一个问题都不满意,请随时写一个答案。
    • 如何“不依赖ch的类型”? while(fs >> ch) 语法适用于 operator>> 重载的任何类型。
    【解决方案3】:

    为此创建了迭代器——具体来说,std::istream_iterator<char>. 它比使用 get()read() 有用得多。

    【讨论】:

      【解决方案4】:

      试试这个:

        char c;
        file >> c;
      

      或者

        char c;
        file.read((unsigned char *) &c, sizeof(c));
      

      【讨论】:

      • 错别字,抱歉错过了&号。
      【解决方案5】:
      #include <fstream>
      
      int main()
      {
          std::ifstream input("file.txt");
          while (input)
          {
              char character;
              input.get(character);
              // Process character.
          }
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-01
        • 2012-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        相关资源
        最近更新 更多