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

互联网上的JustArandomGuy

这是我在StackOverflow上遇到的第一个问题,因此,如果我的问题中遗漏了某些内容或未遵循的某些规则,我向您致歉。请编辑我的问题或在评论中告诉我如何改善我的问题,谢谢。

我正在尝试使用将二进制文件读入std::vector<unsigned char>C ++中std::ifstream问题在于,似乎文件已成功读取,但是向量仍然为空。

这是我用来读取文件的函数:

void readFile(const std::string &fileName, std::vector<unsigned char> &fileContent)
{
    std::ifstream in(fileName, std::ifstream::binary);

    // reserve capacity
    in.seekg(0, std::ios::end);
    fileContent.reserve(in.tellg());
    in.clear();
    in.seekg(0, std::ios::beg);

    // read into vector
    in.read(reinterpret_cast<char *>(fileContent.data()), fileContent.capacity());

    if(in)
        std::cout << "all content read successfully: " << in.gcount() << std::endl;
    else
        std::cout << "error: only " << in.gcount() << " could be read" << std::endl;

    in.close();
}

这就是我在中调用函数的方式main()

std::vector<unsigned char> buf;
readFile("file.dat", buf);
std::cout << "buf size: " << buf.size() << std::endl;

运行代码时,得到以下输出:

all content read successfully: 323
buf size: 0

当我尝试像这样在矢量中打印项目时:

for(const auto &i : buf)
{
    std::cout << std::hex << (int)i;
}
std::cout << std::dec << std::endl;

我得到空输出。

我检查过的东西

  • file.dat 与程序位于同一目录
  • file.dat 不为空

那么,我做错了什么吗?为什么读取后向量为空?

迈克猫

reserve() 分配内存,但不会将分配的区域注册为有效元素。

您应该使用resize()添加元素和size()计数元素。

    // reserve capacity
    in.seekg(0, std::ios::end);
    //fileContent.reserve(in.tellg());
    fileContent.resize(in.tellg());
    in.clear();
    in.seekg(0, std::ios::beg);

    // read into vector
    //in.read(reinterpret_cast<char *>(fileContent.data()), fileContent.capacity());
    in.read(reinterpret_cast<char *>(fileContent.data()), fileContent.size());

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将二进制文件读入相同的文件后,Unsigned Char为(空)

来自分类Dev

将二进制文件读入相同的文件后,Unsigned Char为(空)

来自分类Dev

std :: vector <unsigned char>到QPixmap

来自分类Dev

使用std :: vector <unsigned char>的内容初始化结构

来自分类Dev

将二进制文件读取为“ unsigned char”矢量时的模板参数是什么

来自分类Dev

在std :: vector <unsigned char>中将std :: wstring编码为UTF-16的正确方法是什么?

来自分类Dev

将二进制文件读入std :: vector <uint16_t>而不是std :: vector <char>

来自分类Dev

将QByteArray转换为std :: vector <unsigned char>

来自分类Dev

从opencv imencode删除std :: vector <unsigned char>时发生异常

来自分类Dev

将ATL :: CString转换为std :: vector <unsigned char>

来自分类Dev

cpprestsdk (casablanca) json 值到 std::vector<unsigned char>

来自分类Dev

Qt:将QPixmap保存到std :: vector <unsigned char>-或将QByteArray转换为std :: vector <unsigned char>

来自分类Dev

如何多次使用 memcpy 来转换回 std::vector<unsigned char>?

来自分类Dev

如何将未签名的char []转换为std :: vector <unsigned char>

来自分类Dev

从vector <unsigned char>写入PGM文件

来自分类Dev

将二进制文件读入std :: vector <bool>

来自分类Dev

将文件从Boost filter_streambuf解压缩到std :: vector <unsigned char>?

来自分类Dev

将std :: vector <char>解释为std :: vector <short>

来自分类Dev

将二进制文件读取到vector <char>中,读取的内容少于完整文件

来自分类Dev

类型'std :: istream *'和'char'的无效操作数为二进制'operator >>'

来自分类Dev

使用memcpy,endian将unsigned long转换为std :: vector?

来自分类Dev

二进制 '<<' : 未找到采用类型为 'std::basic_ostream<char, std::char_traits<char>>' 的左操作数的运算符

来自分类Dev

如何创建类似std :: vector的类,该类可以二进制读取/写入巨大的块?

来自分类Dev

如何创建类似std :: vector的类,该类可以二进制读取/写入巨大的块?

来自分类Dev

在std :: vector中进行二进制搜索

来自分类Dev

在std :: vector中进行二进制搜索

来自分类Dev

在std :: vector中进行二进制搜索

来自分类Dev

使用ifstream读取二进制文件

来自分类Dev

如何将std :: vector <bool>转储到二进制文件中?

Related 相关文章

  1. 1

    将二进制文件读入相同的文件后,Unsigned Char为(空)

  2. 2

    将二进制文件读入相同的文件后,Unsigned Char为(空)

  3. 3

    std :: vector <unsigned char>到QPixmap

  4. 4

    使用std :: vector <unsigned char>的内容初始化结构

  5. 5

    将二进制文件读取为“ unsigned char”矢量时的模板参数是什么

  6. 6

    在std :: vector <unsigned char>中将std :: wstring编码为UTF-16的正确方法是什么?

  7. 7

    将二进制文件读入std :: vector <uint16_t>而不是std :: vector <char>

  8. 8

    将QByteArray转换为std :: vector <unsigned char>

  9. 9

    从opencv imencode删除std :: vector <unsigned char>时发生异常

  10. 10

    将ATL :: CString转换为std :: vector <unsigned char>

  11. 11

    cpprestsdk (casablanca) json 值到 std::vector<unsigned char>

  12. 12

    Qt:将QPixmap保存到std :: vector <unsigned char>-或将QByteArray转换为std :: vector <unsigned char>

  13. 13

    如何多次使用 memcpy 来转换回 std::vector<unsigned char>?

  14. 14

    如何将未签名的char []转换为std :: vector <unsigned char>

  15. 15

    从vector <unsigned char>写入PGM文件

  16. 16

    将二进制文件读入std :: vector <bool>

  17. 17

    将文件从Boost filter_streambuf解压缩到std :: vector <unsigned char>?

  18. 18

    将std :: vector <char>解释为std :: vector <short>

  19. 19

    将二进制文件读取到vector <char>中,读取的内容少于完整文件

  20. 20

    类型'std :: istream *'和'char'的无效操作数为二进制'operator >>'

  21. 21

    使用memcpy,endian将unsigned long转换为std :: vector?

  22. 22

    二进制 '<<' : 未找到采用类型为 'std::basic_ostream<char, std::char_traits<char>>' 的左操作数的运算符

  23. 23

    如何创建类似std :: vector的类,该类可以二进制读取/写入巨大的块?

  24. 24

    如何创建类似std :: vector的类,该类可以二进制读取/写入巨大的块?

  25. 25

    在std :: vector中进行二进制搜索

  26. 26

    在std :: vector中进行二进制搜索

  27. 27

    在std :: vector中进行二进制搜索

  28. 28

    使用ifstream读取二进制文件

  29. 29

    如何将std :: vector <bool>转储到二进制文件中?

热门标签

归档