1、fopen
FILE *fopen(char *filename, *type);
(1)char *filename为文件路径和名称格式:
FILE *fp;
fp=("a.txt","r");
是指在当前目录下打开文件a.txt。所以路径又分为绝对路径和相对路径。这是相对路径,下面是绝对路径:
fp=("c:\\hzk16',"rb")
(2)*type是打开文件的类型
"r" 打开文字文件只读(文件已存在)
"w" 创建文字文件只写(覆盖重写)
"a" 增补, 如果文件不存在则创建一个
"r+" 打开一个文字文件读/写
"w+" 创建一个文字文件读/写
"a+" 打开或创建一个文件增补
"b" 二进制文件(可以和上面每一项合用)
"t" 文这文件(默认项)
“rt” 只读打开一个文本文件,只允许读数据
“wt” 只写打开或建立一个文本文件,只允许写数据
“at” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+” 读写打开一个文本文件,允许读和写
“wt+” 读写打开或建立一个文本文件,允许读写
“at+” 读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+” 读写打开一个二进制文件,允许读和写
“wb+” 读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
在这里,
(3)要配合fclose使用。r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2、fwrite
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
-- buffer:指向数据块的指针
-- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)
-- count:数据个数
-- stream:文件指针
例如double a[5]={1.1,1.2,1.3,1.4,1.5};fread(a,sizeof(double),5,fp)将数组a中的数据存放如文件fp中。
3、fread
size_t fread( void *buffer, size_t size, size_t count, FILE *stream )
buffer 是数据存放的内存的指针(可以是数组,或者指针)
size 是每次读取的字节数
count 是读取次数
stream 是要读取的文件的指针
例如double a[5]={1.1,1.2,1.3,1.4,1.5};fread(a,sizeof(double),5,fp)将文件fp中的数据存放到数组a中。
4、备注
把一个文本文件读入内存时,要将ASCII码转换成二进制码, 而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。
5、对二进制文件的读写
FILE* fp_3;
fp_3 = fopen("F:\\model_sv_coef-c2.txt", "rb");
double* sv_coef_c; // 大小为totalSV;
sv_coef_c = new double[totalSVsum[15]];
fread(sv_coef_c, sizeof(double), totalSVsum[15], fp_3);
fclose(fp_3); delete[] sv_coef_c;
写文件要用 fp_3 = fopen("F:\\model_sv_coef-c2.txt", "wb");