C++写文件笔记

发布时间:2026/7/9 9:44:00

C++写文件笔记 C写文件笔记C二进制文件写入二进制文件写入是C高频操作相比文本文件具有体积小、读写快、数据完整的优势适用于序列化、配置保存等场景。以下为两种核心写入方式C语言风格、C原生风格主目录仅保留最简示例进阶操作如指针定位放在对应子章节便于分层学习。1. C语言风格FILE*写入兼容适配首选1.1 FILE*基础写文件适配C/C混合、嵌入式、老项目依赖cstdio需手动管理文件指针主目录仅展示“打开-写入-关闭”最简流程。#includecstdiousingnamespacestd;structStudent{charname[20];intage;floatscore;};intmain(){// 1. 打开二进制文件wb二进制写入不存在则创建存在则覆盖FILE*fpfopen(test_fwrite.bin,wb);if(!fp)return1;// 校验打开结果// 2. 最简写入基础数据自定义结构体intnum123456;Student stu{ZhangSan,20,95.5f};fwrite(num,sizeof(int),1,fp);fwrite(stu,sizeof(stu),1,fp);// 3. 关闭文件释放资源fclose(fp);return0;}所用核心函数原型及参数解释最简版fopenFILE* fopen(const char* filename, const char* mode);参数文件路径、打开模式“wb”二进制写入。fwritesize_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream);参数数据地址、单个元素字节数、元素个数、文件指针。fcloseint fclose(FILE* stream);参数文件指针功能释放资源。1.2 FILE*进阶文件指针定位fseek用法在最简写入基础上新增fseek指针定位功能实现指定位置写入/覆盖适用于灵活调整写入位置的场景。using namespace std; int main() { FILE* fp fopen(test_fwrite_seek.bin, wb); if (!fp) return 1; int num1 123456, num2 654321; // 先写入num1指针自动移动到文件末尾 fwrite(num1, sizeof(int), 1, fp); // 定位指针到文件开头SEEK_SET文件起始覆盖写入num2 fseek(fp, 0, SEEK_SET); fwrite(num2, sizeof(int), 1, fp); // 定位指针到当前位置SEEK_CUR向后偏移4字节写入新数据 fseek(fp, 4, SEEK_CUR); int num3 7890; fwrite(num3, sizeof(int), 1, fp); fclose(fp); return 0; }进阶函数fseek原型及参数解释fseekint fseek(FILE* stream, long int offset, int origin);参数1stream文件指针参数2offset偏移量正数向后移负数向前移参数3origin偏移基准SEEK_SET文件起始、SEEK_CUR当前位置、SEEK_END文件末尾。2. 标准ofstream流写入C原生首选2.1 ofstream基础写文件纯C环境、跨平台首选ofstream类封装无需手动管理指针主目录仅展示“打开-写入-关闭”最简流程。#includefstreamusingnamespacestd;structStudent{charname[20];intage;floatscore;};intmain(){// 1. 打开二进制文件ios::binary二进制ios::out写入ofstreamofs(test_fstream.bin,ios::binary|ios::out);if(!ofs.is_open())return1;// 校验打开结果// 2. 最简写入基础数据自定义结构体intnum123456;Student stu{LiSi,21,92.0f};ofs.write((char*)num,sizeof(num));ofs.write((char*)stu,sizeof(stu));// 3. 关闭文件流ofs.close();return0;}所用核心方法原型及参数解释最简版ofstream 构造函数ofstream(const char* filename, ios_base::openmode mode);参数文件路径、打开模式。ofstream::is_openbool is_open() const;返回值true打开成功。ofstream::writeostream write(const char* ptr, streamsize count);参数数据地址强转char*、写入字节数。ofstream::closevoid close();功能释放文件资源。2.2 ofstream底层流进阶指针定位与灵活写入依托ostream基类特性在ofstream最简写入基础上新增seekp指针定位、分块写入等进阶操作体现灵活性与可扩展性。using namespace std; int main() { ofstream ofs(test_ostream_advance.bin, ios::binary | ios::out); if (!ofs) return 1; // 1. 零散数据拼接写入 char header[] BIN_FILE; int count 3; float a 10.5f, b 20.8f, c 30.2f; ofs.write(header, sizeof(header)); ofs.write((char*)count, sizeof(count)); ofs.write((char*)a, sizeof(a)); // 2. seekp指针定位定位到文件开头覆盖写入数据总大小 ofs.seekp(0, ios::beg); int total_size sizeof(header) sizeof(count) sizeof(a) sizeof(b) sizeof(c); ofs.write((char*)total_size, sizeof(total_size)); // 3. 大文件分块写入避免占用过多内存 const int BUF_SIZE 1024; char big_data[1024 * 10]; for (int i 1024*10; i) big_data[i] i % 256; int pos 0, total sizeof(big_data); while (pos total) { int write_size min(BUF_SIZE, total - pos); ofs.write(big_data pos, write_size); pos write_size; } ofs.close(); return 0; }进阶方法seekp原型及参数解释ofstream::seekpostream seekp(streampos pos);或ostream seekp(streamoff off, ios_base::seekdir dir);参数1pos/off指针位置绝对位置pos或相对偏移off参数2dir偏移基准ios::beg文件起始、ios::cur当前位置、ios::end文件末尾功能调整输出流指针实现指定位置写入。FILE*与ofstream对比建议写入方式含进阶优势劣势推荐场景FILE*写入兼容强、性能高、底层可控支持fseek定位C风格、需手动管理指针嵌入式、混合编译、老项目ofstream写入C原生、跨平台、安全简洁支持seekp定位与分块性能略低于fwrite日常项目、新手、纯C环境需灵活写入场景选型总结新手优先ofstream最简版兼容场景用FILE*最简版

相关新闻