- 文件的打开
- 文件的关闭
- 文件的读写
- 字符方式的文件读写
- 字符串方式的文件读写
- 格式化文件的读写
- 数据块读写函数
- 文件定位函数
- fseek()函数
- ftell()函数
- rewind()函数
- feof()函数
文件的打开以下是对C语言文件相关操作的粗略学习,具体的相关源码开源在Github上
FILE *fp; fp = fopen("文件名","文件打开方式");
功能:fopen()打开一个指向文件名的文件,文件操作方式由打开方式的值决定
返回值:正常打开为返回一个指向该文件信息结构体的指针,若错误,则返回错误表示NULL
文件打开方式参数
说明:
- “文件名”指出对哪个具体文件进行操作,一般需要指定文件路径,否则默认为与程序的当前路径相同
- 以“r”方式打开的文件应该已经存在,以“w”方式打开的文件,如果不存在,则新建一个,否则在打开时将该文件删去,然后重新建立一个新文件
- 若不希望删除原有数据,则应该用“a”方式打开
- 用“*+”方式打开的文件可以用来输入输出数据
- 不允许同一文件在关闭前被再次打开
fclose(文件指针);
功能:关闭文件指针对应的文件,并返回一个整数值
返回值:若成功关闭,则返回0,否则返回一个非零值
int fgetc(FILE *fp);
功能:从fp指向的文件中读取一个字节代码
返回值:正常则返回督导的代码值,读到文件尾或出错则返回EOF
int fputc(int c, FILE *fp);
功能:把一字节代码c写入fp指向的文件中
返回值:正常则返回c,出错返回EOF
#include#include #include #include int main(int argc, char const *argv[]) { char string[20]; FILE *fp; if((fp = fopen("f1.txt","w+")) == NULL) { printf("File open error!n"); exit(0); } printf("input a string: n"); // gets()函数读入回车符时停止,且回车符不作为字符串读入,因此只输入回车时,字符串长度为0,循环结束 while(strlen(gets(string))>0) { fputs(string,fp); fputs("n",fp); } // 把指针fp所致的文件的内部位置指针移动到文件头 rewind(fp); while(fgets(string,20,fp) != NULL) { puts(string); } if(fclose(fp)) { printf("Can not close the file!n"); exit(0); } return 0; }
格式化文件的读写注:fgets()函数读到回车符时,也将其作为一个字符读入到字符串中,gets()函数则不会;fputs()函数不会在写入文件的字符串末尾加上回车符,而puts()函数会输出回车符。
int fprintf(FILE *fp, 格式控制串, 输出列表); int fscanf(FILE *fp, 格式控制串, 输入列表);
功能:fprintf()函数按格式控制串中的控制符把响应数据写入fp指向的文件中;fscanf()函数从fp指向的文件中按格式控制串中的控制符,读取相应的数据,并赋给输入列表中对应的变量地址中。
返回值:成功返回读写个数,出错或位于文件尾,返回EOF
按数据块读写文件,能方便地对程序中的数组、结构体数据进行整体输入输出
int fread(void *ptr, int size, int count, FILE *fp); int fwrite(void *ptr, int size, int count, FILE *fp);
功能:fread()函数在fp指定的文件中读取count次数据项(每次size字节),存放到以ptr所指的内存单元地址中。fwrite()函数为从ptr为首地址的内存中取出count次数据项(每次size字节),写入fp所指的磁盘文件中。
返回值:成功返回读写的块数;出错或处于文件尾,返回0
文件定位函数 fseek()函数注意:用fread()和fwrite()读写时,必须向二进制文件读写数据项
int fseek(FILE *fp, long offset, int from);
功能:控制文件的位置指针移动。from表示起始位置,文件首部:0/SEEK_SET,当前位置:1/SEEK_CUR,文件尾部:2/SEEK_END。offest表示以起始点为基点,向前移动的字节数。
返回值:定位成功为0,不成功则为非0的整数值
举例:
// 将位置指针移动到离文件头100字节处 fseek(fp, 100L, 0); // 将位置指针移动到离当前位置50字节处 fseek(fp, 50L, 1); // 将位置指针从文件末尾处向后退10字节 fseek(fp, 50L, 2); // 将位置指针移动到离文件尾部前20字节处 fseek(fp, -20L, SEEK_END);ftell()函数
long ftell(FILE *fp);
功能:获取当前文件指针的位置,即相对于文件开头的位移量(字节数)
返回值:成功时,返回值>=0,即文件指针的当前指向,出错时返回-1L
void rewind(FILE *fp);
功能:定位文件指针,使文件指针指向读写文件的首地址,即打开文件时文件指针所指向的位置
feof()函数int feof(FILE *fp);
功能:判断fp指针是否已经到文件末尾
返回值:返回值为1时,表示到文件结束位置;返回值为0时,表示文件未结束