本文针对在工作中遇到的问题,并结合网上的资料作了总结,希望对各位有用。
最近,在工作中,要做一个关键日志保存工具。在开发过程中,使用了函数fwrite写入到文本文件中,但是当用UE打开以后,却总是以十六进制的形式显示,
即使进行转换,文本文件中,仍然有很多乱码,但是使用函数fprintf写入却不会出现上面的问题。
一、 fwrite函数介绍
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
功能:向文件写入一个数据块(以二进制形式对文件进行操作,不局限于文本文件)
返回值:返回实际写入的数据块数目
参数说明:
1. buffer:要获取数据的地址;
2. size:要写入内容的单字节数;
3. count:要进行写入size字节的数据项的个数;
4. stream:目标文件指针;
注意:fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步
#include
struct mystruct
{
int i;
char c;
};
int main(void)
{
FILE *stream;
struct mystruct s;
if((stream = fopen("./test.tmp", "wb")) == NULL)
{
fprintf(stderr, "cannot open output file.\n");
return 1;
}
s.i = 2;
s.c = 'A';
fwrite(&s, sizeof(s), 1, stream); //写mystruct到文件中
fclose(stream); //关闭文件
return 0;
}
结果:
[root@f8s fwrite_test]# cat test.tmp
A/oot@f8s fwrite_test]#
[root@f8s fwrite_test]# vim test.tmp
^B^@^@^@A/<87>^@