fwrite,fread and fprintf,fscanf的一些使用体会
2016-05-06 20:59
531 查看
这周一直在完成一个任务,就是将训练出的多个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 读写文件的时候,切记注意变量的格式,举个例子:
我读入一个double类型数据,但是想以float型写入文件,然后再以float读入,发现读出的数据b是错的。原因在于一个double类型,读入sizeof(float)个字节,会发生截断,所以数据是错误的。应该改为:
也就是必须坚持以原数据的原有格式去读写。
3. 多次打开文件,写数据的方式
一般我们使用:
a即附加的意思。读的时候,如果我们先读入部分数据,再将文件关掉,然后再打开文件,继续读下一行的数据,可以使用
先记下之前读文本的指针位置偏移量,然后下一次打卡文件,将文件指针从头偏移offset量即可。
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);
相关文章推荐
- java----map,set,hash的源码分析---篇1
- mac常用快捷键
- 幻方 C代码
- JAVA+CKEditor+CKFinder 配置异常解决方案
- 神经网络更新参数的几种方法
- 趣谈Java变量的可见性问题
- Cocos2d-x学习(3) - cocos2d坐标系,锚点
- jetty的基本介绍
- JAVA打开CHM类型帮助文件
- 浅谈链表以及链表基本操作
- [Java视频笔记]day18
- Next Permutation
- centos安装kubernetes,calico,nfs
- 李航博士:浅谈我对机器学习的理解
- 写给那些想成为Linux高手的人
- Auditing SQL Server SQL Statements
- c++继承和多态
- Understanding LSTM Networks
- C++第五次上机实验其他作业
- Android-视图坐标系