标签:
这周一直在完成一个任务,就是将训练出的多个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);
fwrite,fread and fprintf,fscanf的一些使用体会
标签:
原文地址:http://blog.csdn.net/xiamentingtao/article/details/51334570