如何查找输入文件的大小

时间:2016-02-10 11:12:11

标签: c++ file while-loop eof filesize

我编写的代码用于从输入文件中获取数据(它只是一列1和0)并将其转换为多个32位数字。当我知道输入文件中有多少个数字时,这很好用。我正在尝试修改它,以便它适用于我不知道大小的不同输入文件,这就是我遇到问题的地方 我的输入文件是rad。 我试过了:

java.io.IOException

不返回任何内容,

int x=0;
while(!rad.eof()) {
x++;
}
cout << x;

返回许多相同的大数字

while(!rad.eof()) {
        rad >> x;
        cout << x << endl;
    }

返回大量零

当我知道输入文件的大小时,有效的代码是:

while(!rad.eof()) {
        rad >> x;
        cerr << x << endl;
    }

任何帮助将不胜感激,请使用简单的语言。

3 个答案:

答案 0 :(得分:2)

假设radstd::ifstream,您可以使用seekg()tellg()

  // std::ios_base::ate seeks to the end of the file on construction of ifstream
  std::ifstream rad ("file.txt", std::ios_base::ate);
  int length = 0;
  if (rad) {
    length = is.tellg();
    is.seekg (0, std::ios_base::beg); // reset it to beginning if you want to use it
  }
  // .. use length

答案 1 :(得分:0)

请查看手册: http://www.cplusplus.com/reference/ios/ios/eof/

它包含如何读取数据的示例。该示例也可用于计算数据。

您可以这样重写:

std::ifstream is("example.txt");   // open file

int cnt = 0;
char c;
while (is.get(c))                  // loop getting single characters
   cnt++;

std::cout << "Character count in file: " << cnt;

is.close();

答案 2 :(得分:0)

无需担心流中的值数量。只需将它们复制到容器中即可。您可以检查容器的大小,但不一定需要。

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

  // and in a function somewhere, assuming rad is a valid stream

std::vector<int> data;

std::copy(std::istream_iterator<int>(rad), 
          std::istream_iterator(), 
          std::back_inserter<std::vector<int> > (data));

以上假设您要求一次读取一个int,并将其添加到矢量中。