使用ifstream :: seekg和tellg获取文件大小

5年以后DBA

当我尝试获取文件大小时,我具有以下块来测试seekg和tellg的行为:

    int size = 0;
    ifstream in(fileName.c_str(), ifstream::in | ifstream::binary);
    if(in)
    {
        in.seekg(0,ifstream::end);
        size = in.tellg();
        cout << endl;
        cout << endl;
        cout << "********** size stream1*** =" << size << endl;
        in.seekg(0,ios::end);
        size = in.tellg();
        cout << "********** size stream2*** =" << size << endl;
        in.seekg(0,ios::end);
        size = in.tellg();
        cout << "********** size stream3*** =" << size << endl;
        in.seekg(100,ios::end);
        size = in.tellg();
        cout << "********** size stream4*** =" << size << endl;
        in.seekg(0,ios::beg);
        size = in.tellg();
        cout << "********** size stream5*** =" << size << endl;
        in.seekg(100);
        in.seekg(0, ios::end);
        size = in.tellg();
        cout << "********** size stream6*** =" << size << endl;
        in.seekg(100);
        in.seekg(0, ios::cur);
        size = in.tellg();
        cout << "********** size stream7*** =" << size << endl;
        in.seekg(-100,ios::end);
        size = in.tellg();
        cout << "********** size stream8*** =" << size << endl;
        in.seekg(ios::beg,ios::end);
        size = in.tellg();
        cout << "********** size stream9*** =" << size << endl;
        in.seekg(ios::beg);
        in.seekg(ios::end);
        size = in.tellg();
        cout << "********** size stream10*** =" << size << endl;
        cout << endl;
        cout << endl;
    }

其结果如下:

********** size stream1*** =1846
********** size stream2*** =1846
********** size stream3*** =1846
********** size stream4*** =1946
********** size stream5*** =0
********** size stream6*** =1846
********** size stream7*** =100
********** size stream8*** =1746
********** size stream9*** =1846
********** size stream10*** =2

我的问题如下:

  1. 请问所以tellg将返回字节最后seekg发现了什么?
  2. 为什么stream5结果为0?其先前位置在文件末尾。
  3. seekg总是从文件的开头开始,如stream5所示
  4. seekg不能向后退,如stream5所示
  5. seekg的第一个参数到底是什么意思?它说这是第二个参数的偏移量。如果它是一个正值,似乎超出了第二个参数所指向的位置,如stream4中所示
  6. 如果我想知道前100个字节后的大小,则必须使用stream8中所示的-100
  7. 为什么stream10是2?
  8. seekptellp在ofstream的有属性seekg所以tellg这里?
迪特玛·库尔(DietmarKühl)

好,我们开始:

  1. 编号tellg()将产生位置对象,可用于返回到您所在的位置。返回的类型std::streamposstd::fpos<std::mbstate_t>但是,std::fpos<std::mbstate_t>将a转换为std::streamoff整数。本质上,astd::streampos转换为从第一个位置到当前位置的字符数。
  2. 寻找0对于字符std::ios_base::beg的位置将位置明确设置为文件的开头。您是要使用std::ios_base::cur吗?
  3. seekg()将是相对于开始,当前位置,或者根据端部何处参数之中std::ios_base::begstd::ios_base::curstd::ios_base::end
  4. 不可以。您可以使用负偏移量向后移动。
  5. 请参见3 .:第一个参数是相对于whence参数指定的位置移动的偏移量
  6. 不。如果您知道文件中有多少个字符,请从该数字中减去100。
  7. 您使用绝对定位,其中wherece值用作位置。std::ios_base::seekdir类型是一个枚举,并std::ios_base::end可能具有价值2
  8. 差不多了

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用in和out的ifstream和ofstream或fstream

来自分类Dev

使用ifstream以逗号读取.txt文件

来自分类Dev

在Qt中使用ifstream发出打开文件

来自分类Dev

使用seekg和seekp获取错误的输出

来自分类Dev

使用file.get()和file.seekg()后,file.tellg()停留在相同的数字上

来自分类Dev

使用ifstream从文本文件中打印整数

来自分类Dev

使用ifstream读取二进制文件

来自分类Dev

什么是std :: filebuf等效于ifstream :: eof :: fail和:: tellg

来自分类Dev

我的代码将不会使用ifstream和ofstream从文件读取和显示数据

来自分类Dev

在ifstream上的getlines [会耗尽文件]之后的seekg问题

来自分类Dev

如何使用重定向的标准输入(即cin)读取文件(注意:不使用ifstream)

来自分类Dev

在std :: string中读取整个文件还是使用std :: ifstream操作文件会更好吗?

来自分类Dev

如何在Linux上使用std :: ifstream从文件中读取非ASCII行?

来自分类Dev

C ++加密文本文件,允许通过ifstream使用解密

来自分类Dev

使用ifstream从C ++文件中读取二进制无符号短整数

来自分类Dev

使用字符串作为打开文件路径的 C++ ifstream 错误

来自分类Dev

Ifstream:打开一个可使用变量访问的文件

来自分类Dev

在 C++ 中使用 std::ifstream 读取 ASCII 文本文件

来自分类Dev

我无法在构建中使用 ifstream 读取文件,但可以在 IDE 中读取它

来自分类Dev

使用文件大小函数和 Linux ls -alh 时获取不同的文件大小

来自分类Dev

在C ++中,为了在函数中使用数组,在其中使用ifstream将数据从.txt文件输入到数组中

来自分类Dev

从文件读取C ++ Ifstream

来自分类Dev

ifstream和oftream问题

来自分类Dev

Ifstream和Ofstream问题

来自分类Dev

使用NSFileManager获取文件大小

来自分类Dev

使用ifstream加载文件时出错-仅加载一小部分

来自分类Dev

使用std :: ifstream读取二进制文件后,std :: vector <unsigned char>保持为空

来自分类Dev

将文件放在ifstream和fstream的位置

来自分类Dev

使用seekg()c ++从文件末尾搜索char

Related 相关文章

  1. 1

    使用in和out的ifstream和ofstream或fstream

  2. 2

    使用ifstream以逗号读取.txt文件

  3. 3

    在Qt中使用ifstream发出打开文件

  4. 4

    使用seekg和seekp获取错误的输出

  5. 5

    使用file.get()和file.seekg()后,file.tellg()停留在相同的数字上

  6. 6

    使用ifstream从文本文件中打印整数

  7. 7

    使用ifstream读取二进制文件

  8. 8

    什么是std :: filebuf等效于ifstream :: eof :: fail和:: tellg

  9. 9

    我的代码将不会使用ifstream和ofstream从文件读取和显示数据

  10. 10

    在ifstream上的getlines [会耗尽文件]之后的seekg问题

  11. 11

    如何使用重定向的标准输入(即cin)读取文件(注意:不使用ifstream)

  12. 12

    在std :: string中读取整个文件还是使用std :: ifstream操作文件会更好吗?

  13. 13

    如何在Linux上使用std :: ifstream从文件中读取非ASCII行?

  14. 14

    C ++加密文本文件,允许通过ifstream使用解密

  15. 15

    使用ifstream从C ++文件中读取二进制无符号短整数

  16. 16

    使用字符串作为打开文件路径的 C++ ifstream 错误

  17. 17

    Ifstream:打开一个可使用变量访问的文件

  18. 18

    在 C++ 中使用 std::ifstream 读取 ASCII 文本文件

  19. 19

    我无法在构建中使用 ifstream 读取文件,但可以在 IDE 中读取它

  20. 20

    使用文件大小函数和 Linux ls -alh 时获取不同的文件大小

  21. 21

    在C ++中,为了在函数中使用数组,在其中使用ifstream将数据从.txt文件输入到数组中

  22. 22

    从文件读取C ++ Ifstream

  23. 23

    ifstream和oftream问题

  24. 24

    Ifstream和Ofstream问题

  25. 25

    使用NSFileManager获取文件大小

  26. 26

    使用ifstream加载文件时出错-仅加载一小部分

  27. 27

    使用std :: ifstream读取二进制文件后,std :: vector <unsigned char>保持为空

  28. 28

    将文件放在ifstream和fstream的位置

  29. 29

    使用seekg()c ++从文件末尾搜索char

热门标签

归档