int fclose(FILE *fp);
文件一旦使用完毕,应该用 fclose() 函数把文件关闭,以释放相关资源,避免数据丢失。fclose() 的用法为:
fp 为文件指针;
文件正常关闭时,fclose() 的返回值为0,如果返回非零值则表示有错误发生。
FILE * fopen (char * filename, char * mode);
#include<stdio.h>
filename 文件名称
mode 打开模式:
有:
r
只读方式打开一个文本文件
rb
只读方式打开一一个二 二进制文件
W
只写方式打开一一个文本文件
wb
只写方式打开一个二进制文件
a
追加方式打开一个文本文件
ab
追加方式打开一个二进制文件
r+
可读可写方式打开一个文本文件
rb+
可读可写方式打开- -个二 进制文件
w+
可读可写方式创建一个文本文件
wb+
可读可写方式生成一个二进制文件
a+
可读可写追加方式打开一个文本文件
ab+
可读可写方式追加一一个二进制文件
调用 fopen() 函数时必须指明读写权限,但是可以不指明读写方式(此时默认为"t")。
读写权限和读写方式可以组合使用,但是必须将读写方式放在读写权限的中间或者尾部(换句话说,不能将读写方式放在读写权限的开头)。例如:
将读写方式放在读写权限的末尾:"rb"、"wt"、"ab"、"r+b"、"w+t"、"a+t"将读写方式放在读写权限的中间:"rb+"、"wt+"、"ab+"
整体来说,文件打开方式由 r、w、a、t、b、+ 六个字符拼成,各字符的含义是:
r(read):读w(write):写a(append):追加t(text):文本文件b(banary):二进制文件+:读和写
关于 fread(); fwrite(); fseek();fgets();fgetc();feof();(ferror没写)
// FILE * fp; 必须命名 fp 为指向 FILE 的指针FILE * fp = fopen("./clc.txt","w+"); // 注意一下,这里是指针,"w+" 必须加 " " if(fp == NULL){puts("fail to open file"); exit(-1); // 关于 exit() 其声明为:void exit(int status); 作用就是退出当前程序; // status 指的是 程序退出时的状态码,一般 0 表示正常退出,其他表示非正常退出,一般都使用 -1;}/ size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中。ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。size -- 这是要读取的每个元素的大小,以字节为单位。nmemb -- 这是元素的个数,每个元素的大小为 size 字节。stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。返回值:返回成功读取的对象个数,若出现错误或到达文件末尾,若size或nmemb 为零,则fread返回零且不进行其他动作。fread不区分文件尾和错误,因此调用者必须用feof和ferror才能判断发生了什么。使用时,必须要注意:char c[] = "This is runoob";fread(buffer, strlen(c)+1, 1, fp); 这里是 strlen(C) + 1 要多出一个字节以存放 '\0'另外,fread() 与 fwrite() 其实是一样的,都是从光标处开始写入/读取的,所以,要考虑清楚, fseek() 的使用/ int fseek(FILE *stream, long int offset, int whence);stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。offset -- 这是相对 whence 的偏移量,以字节为单位。whence -- 这是表示开始添加偏移 offset 的位置关于 whence:SEEK_SET 文件的开头SEEK_CUR 文件指针的当前位置SEEK_END 文件的末尾你看,其实和 lseek(); 是一样的/ size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);ptr -- 这是指向要被写入的元素数组的指针。size -- 这是要被写入的每个元素的大小,以字节为单位。nmemb -- 这是元素的个数,每个元素的大小为 size 字节。stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流(其实就是文件夹的地址)返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。eg:char str[] = "This is runoob.com";fwrite(str, sizeof(str) , 1, fp );/ int feof(FILE *stream);返回值:当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。while(1){c = fgetc(fp); // fgetc 与 fgets 唯一的区别是 c 只读一个字符,s 读一行字符if( feof(fp) ){ break ;}printf("%c", c);}/ char * fgets(char *str, int n, FILE *stream);从 stream 中读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止;返回值是:如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,也返回一个空指针。所以是每次只能取出一行,且当全部读取后,返回值为 NULL 使用时:while( fgets(str, N, fp) != NULL ) {printf("%s", str);}fclose(fp);