C++非文本文件写入混乱

C++非文本文件写入混乱

C++使用fstream读取非文本文件时,一般常规读取就可以,例如将图片读取出来并存储到char数组

  ifstream File_test1;
    //以读取方式打开jpg文件
    File_test1.open("1.jpg", std::ios::in);
    //定位到文件末尾
    File_test1.seekg(0, File_test1.end);
    //获得文件总长度
    size_t allLength = File_test1.tellg();
    //将指针定位到文件首
    File_test1.seekg(0,  File_test1.beg);
    //定义数组
    char* str_buff=new char[allLength+10];
    //读取文件至数组
    File_test1.read(str_buff,allLength);
    //关闭文件
    File_test1.close();

但是写入时就会有些坑,非文本类文件需要以二进制写入,例如

  //以二进制截断写入方式打开文件
    ofstream File_test2("tt2.jpg", std::ios::binary | std::ios::out | std::ios::trunc);
    //将数组写入文件
    File_test2.write(str_buff, allLength);
    //关闭文件
    File_test2.close();

不然会默认以文本形式写入。非文本类文件,例如图片,以文本方式写入会造成内部混乱。

完整代码

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream File_test1;
    //以读取方式打开jpg文件
    File_test1.open("1.jpg", std::ios::in);
    //定位到文件末尾
    File_test1.seekg(0, File_test1.end);
    //获得文件总长度
    size_t allLength = File_test1.tellg();
    //将指针定位到文件首
    File_test1.seekg(0,  File_test1.beg);
    //定义数组
    char* str_buff=new char[allLength+10];
    //读取文件至数组
    File_test1.read(str_buff,allLength);
    //关闭文件
    File_test1.close();

    //以二进制截断写入方式打开文件
    ofstream File_test2("tt2.jpg", std::ios::binary | std::ios::out | std::ios::trunc);
    //将数组写入文件
    File_test2.write(str_buff, allLength);
    //关闭文件
    File_test2.close();
    //释放空间
    delete[] str_buff;
    return 0;
}

原文链接: https://www.cnblogs.com/WindSnowLi/p/16998252.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++非文本文件写入混乱

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/364925

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午3:49
下一篇 2023年3月2日 下午3:49

相关推荐