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;
}