求教:请大家帮忙看一个写文件的函数
有这么一个函数
- C/C++ code
bool getFile(const char *inputFileName){ FILE *fd,*fin; nal_reader_t nal; uint8_t *nal_buffer; uint32_t nal_buffer_size, nal_buffer_size_max; fd=NULL; nal_buffer=NULL; nal_buffer_size = 0; nal_buffer_size_max = 0; memset(&nal, 0, sizeof(nal)); if((fd=ReadFile(inputFileName))==NULL) { fprintf(stderr, "%s: can't open file %s: %s\n",ProgName, inputFileName, strerror(errno)); return false; } fin=fopen("test1.temp","wb"); if(!fin) { fprintf(stderr, "%s: can't open file %s: %s\n",ProgName, inputFileName, strerror(errno)); return false; } nal.ifile=fd; while(LoadNal(&nal) != false) { uint32_t header_size; header_size = nal.buffer[2] == 1 ? 3 : 4; uint32_t to_write; to_write = nal.buffer_on; if (to_write + 4 + nal_buffer_size > nal_buffer_size_max) { nal_buffer_size_max += nal.buffer_on + 4; nal_buffer = (uint8_t *)realloc(nal_buffer, nal_buffer_size_max); } memcpy(nal_buffer + nal_buffer_size + 4,nal.buffer + header_size,to_write); nal_buffer_size += to_write + 4; if(fwrite(nal_buffer,1,nal_buffer_size,fin)) { printf("写入文件成功\n"); } } return true;}loadNal函数用于读取文件内容(文件是由很多个Nal单元组成的,每个nal单元的起始字符相同)
其中nal_reader_t nal是一个结构体,用于读取文件时记录一些参数。定义如下:
- C/C++ code
typedef struct nal_reader_t { FILE *ifile; uint8_t *buffer; uint32_t buffer_on; uint32_t buffer_size; uint32_t buffer_size_max;} nal_reader_t;因为所读取的文件内容是二进制的,由很多个小的单元组成,每个单元的开头以相同的起始码标记,我想实现的功能是将文件内容以单元为单位读取出来,经过修改后写入到一个新的文件中,但是上面的代码在执行时可以读取到每个单元的内容,但是在写入文件时会输出写入文件成功的标记,文件中没有内容。请大家帮忙看看是什么原因,谢谢大家
[解决办法]
fwrite(nal_buffer,1,nal_buffer_size,fin)之后要fclose,这样才能将写好的文件保存起来,才会有内容