今天Mayuyu来学习C++文件操作,在C++中关于文件操作的方法主要有如下几个
(1)fopen()
此函数的原型为
如果文件打开失败会返回NULL,如果失败一般会做判断处理。参数说明如下
path 代表文件名
mode 代表数据流形态,一般有如下一些模式
r 以只读的方式打开文件
r+ 以可读写方式打开文件
rb+ 以读写方式打开一个二进制文件
w 打开只写文件,如果文件存在,则清空文件并写入新数据,如果不存在则建立新文件
w+ 打开可读写文件,如果文件存在,则清空文件并写入新数据,如果不存在则建立新文件
a 以附加的方式打开只写文件,如果文件存在,写入的数据会被加到文件尾,否则建立新文件
a+ 以附加的方式打开可读写的文件,如果文件存在,写入的数据会被加到文件尾,否则建立新文件
wb 只写打开或者建立一个新的二进制文件,只允许写数据
wb+ 读写打开或者建立一个新的二进制文件,允许读和写数据
ab+ 读写打开一个二进制文件,允许读或者在文件末尾追加数据
(2)fseek()
函数原型为
作用:把stream的文件读写位置指针移到指定的位置。
参数说明:
stream fopen()得到的文件指针
offset 表示偏移量,正数表示正向偏移,负数表示负向偏移
fromwhere 表示从文件的哪里开始偏移,可能取值为SEEK_SET,SEEK_CUR,SEEK_EN。
其中SEEK_SET,SEEK_CUR,SEEK_EN值分别是0,1,2,也可以用它们来代替。
(3)ftell()
函数原型为
作用:得到文件位置指针当前位置相对于文件首的偏移字节数。参数为文件的指针。
(4)fread()和fwrite()
函数原型如下
作用:分别用于读取和写文件。参数说明(主要说明中间两个参数)
size 表示要读写的字节数
count 要进行读写多少个size字节的数据项
代码:
#include <string.h>
#include <stdio.h>
#define LEN 15
#define SIZE 1024
char in_file[LEN];
char ou_file[LEN];
char buff[SIZE];
int main(int argc, char **argv)
{
strcpy(in_file, argv[1]);
strcpy(ou_file, argv[2]);
FILE *fd = fopen(in_file, "r");
if(!fd)
{
printf("open input file error!\n");
return -1;
}
fseek(fd, 0, SEEK_END);
long len = ftell(fd);
fseek(fd, 0, SEEK_SET);
fread(buff, len, 1, fd);
fclose(fd);
printf("Input String is : %s\n", buff);
printf("The size of the input file is : %ld\n", len);
FILE *fp = fopen(ou_file, "w");
if(!fp)
{
printf("open output file error!\n");
return -1;
}
fwrite(buff, len, 1, fp);
fclose(fp);
return 0;
}