fwrite,fread and fprintf,fscanf的一些使用体会
来源:互联网 发布:圆点博士 源码 编辑:程序博客网 时间:2024/06/05 17:42
这周一直在完成一个任务,就是将训练出的多个model写成一个model。其中我们使用了c语言的读写方法,搞了一星期, 挖了很多坑,最终都铲平了。下面列举出若干有用的知识。
1.fwrite,fread VS fprintf,fscanf的区别
fwrite,fread 读写的时候,我发现不管使用FILE* pFile = fopen(“myfile.bin”, “wb”);无论是使用“wb”还是“w”,最后写出的数据均是乱码,所以内容是不可读的。但是安全性好,我们后来就使用fwrite,fread 读写model.而 fprintf,fscanf是可视的。
2. 使用fwrite,fread 读写文件的时候,切记注意变量的格式,举个例子:
#include <stdio.h>#include <string.h>int main(){ FILE * pFile; pFile = fopen("myfile.bin", "wb"); double a = 5.1615665161; fwrite(&a, sizeof(float), 1, pFile); rewind(pFile); pFile = fopen("myfile.bin", "rb"); double b ; fread(&b, sizeof(float), 1, pFile); return 0;}
我读入一个double类型数据,但是想以float型写入文件,然后再以float读入,发现读出的数据b是错的。原因在于一个double类型,读入sizeof(float)个字节,会发生截断,所以数据是错误的。应该改为:
#include <stdio.h>#include <string.h>int main(){ FILE * pFile; pFile = fopen("myfile.bin", "wb"); double a = 5.1615665161; float atemp = a; fwrite(&atemp, sizeof(float), 1, pFile); rewind(pFile); pFile = fopen("myfile.bin", "rb"); double b ; float btemp; fread(&btemp, sizeof(float), 1, pFile); b = btemp; return 0;}
也就是必须坚持以原数据的原有格式去读写。
3. 多次打开文件,写数据的方式
一般我们使用:
FILE *fp = NULL;fp = fopen(saved_file_name.c_str(), "ab");
a即附加的意思。读的时候,如果我们先读入部分数据,再将文件关掉,然后再打开文件,继续读下一行的数据,可以使用 long offset = ftell(fp);
先记下之前读文本的指针位置偏移量,然后下一次打卡文件,将文件指针从头偏移offset量即可。
FILE *fp = fopen(forest_file_name.c_str(), "rb");fseek(fp, offset, 0);
0 0
- fwrite,fread and fprintf,fscanf的一些使用体会
- fprintf fscanf fwrite fread
- fread、fwrite、fprintf、fscanf
- matlab中fprintf, fscanf, fwrite, fread函数的用法
- fscanf,fread,fprintf,fwrite的区别和联系
- matlab中fprintf, fscanf, fwrite, fread函数的用法
- fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结
- fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结
- fgets和fputs、fread和fwrite、fscanf和fprintf
- fgets和fputs、fread和fwrite、fscanf和fprintf用法
- fscanf()、fprintf()的使用
- fread fwrite fprintf
- fread fwrite 的使用
- UNIX下函数fgets和fputs、fread和fwrite、fscanf和fprintf用法总结
- 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结
- 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结
- 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结
- C++之函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结
- Go: Readonly Variable
- Java 8从永久代到metaspace
- java----map,set,hash的源码分析---篇1
- mac常用快捷键
- HDU 4738 Caocao's Bridges(双联通分量+并查集)
- fwrite,fread and fprintf,fscanf的一些使用体会
- 幻方 C代码
- hdu4745区间dp
- C++实验5-字符串
- java底层知识(5)--递归与尾递归总结
- OAUS自动升级系统
- 文本建模系列之一:LSA
- 使用oracle的index,指定hint定位到的一个小问题
- IOS自动释放原理及详解