📜介绍一下文件名
一个文件要有一个唯一的文件标识,以便用户识别和使用。
文件名包括三部分:
文件路径+文件名主干+文件后缀
例如:C:\code\test.txt
文件的路径的讲解
我们传过去的路径有两种
①绝对路径
例如 "D:\桌面\planegames_boxed.exe"
"C:\Users\Public\Videos"
👉在这里要注意哦,如果这样直接传地址会有转义字符的影响的。
在传参时,尽量在每个斜杠前加一个斜杠,就可以解决转义字符可能带来的影响
②相对路径
💭下边将会利用文件读写时的操作进行介绍更易理解
文件的基本操作
👉文件的基本操作包括文件的打开与关闭,除了标准的输入输出文件外,其他所有的文件都必需先打开再使用,使用后还必须关闭该文件。
文件指针
📌文件指针是一个指向文件有关信息的指针,这些信息通常包括文件名,状态和当前的位置,他们保存在一个结构体变量中,在使用文件时需要在内存中为其分配空间,用来存放文件的基本信息,该结构体类型是系统定义的,C语言规定该类型为FILE。
不同的C编译站的FILE类型包括的内容完全不同,但是大同小异,这里的细节我们不必关心。
一般都是通过创建一个FILE的指针来维护这个FILE结构的变量,这样使用起来可以更加方便。
创建一个FILE*类型的指针变量:
FILE * pf;
pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件,就是说通过文件指针变量就能够找到与他关联的文件。
文件的打开和关闭
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。
(在程序结束前应该关闭所有的文件,目的是为了防止应为没有关闭文件而造成的数据流失。)
ANSIC规定用fopen函数来打开文件,fclose来关闭文件。
打开文件
🏅FILE * fopen(const char* filename(文件名),const char *mode(打开方式));
关闭文件
🏅int fclose (FILE*stream);
打开方式如下
👉用只读方式打开
通过上图来看,如果文件夹中没有该文件,就会返回一个空指针,用perror判断运行后如图,当然,如果创建了data.txt文件,就不会报错啦。
用写方式呢举一个梨子
int main() { FILE* pfile; pfile = fopen("example","w"); if (pfile == NULL) { perror("fopen"); return 1; } if (pfile != NULL) { fputs("fopen example", pfile); fclose(pfile); } return 0; }
上面的表格我们注意到,用写的方式打开,如果没有文件会生成一个文件,执行相关指令。如果要打开的文件时绝对路径(例如桌面),没有该文件的话也还是会在桌面创建一个出来使用的。
“fputs后续我们会讲,是将字符串输入进文件中去。”
📜运行结果如图
一定要记得关闭程序前关闭所有的文件。
利用"w"介绍相对路径
📝前边加上一个点是当前目录,可以省略。
省略时:
📝删除创建好的lalala,不省略时再次运行
📝我们如果想在上一级目录里面创建lalala呢?
📝在前边加上(.),到达上一级,在上一级的x64里创建lalala
⭐如果还想往前跑,就继续加(.),在文件夹内找到要放置进去的文件夹,这就是文件的相对路径,利用.和\来找到具体的位置,相比较没有绝对路径那么精确。
文件的读写
打开文件后,就可以进行文件的读写,C语言提供了丰富的文件操作函数,现在对其诸个介绍。以下所有函数默认FILE * fp。
fputc函数
ch = fputc (ch,fp);
该函数的作用是把一个字符写进磁盘文件fp中,其中ch就是要输入的数据。fp是文件指针变量,如果函数输出成功,返回的就是输出的字符,如果输出失败,就返回EOF。
⭐看个例子
int main() { FILE* fp; char ch; if ((fp = fopen("file", "w")) == NULL) { assert("fopen"); } ch = getchar(); while (ch != '#') { fputc(ch, fp); ch = getchar(); } fclose(fp); return 0; }
⭐运行后如图:
📑这个例子读取到#则停止。
fgetc函数
ch = fgetc (fp);
这个函数的作用是从指定文件(fp指向的文件)读取一个字符赋予ch。需要注意的是,文件必须是读或者读写的方式打开。
💡上面我们将file文件里写进了几个字符,现在我们来取出他们
int main() { FILE* fp; char ch; fp = fopen("file", "r"); ch = fgetc(fp); while (ch != EOF) { putchar(ch); ch = fgetc(fp); } fclose(fp); return 0; }
💡运行后如图,可以发现确实将文件中写入的字符全部拿到了。
fputs函数
fputs(字符串,文件指针);
和fputc不同的是,这个函数的作用是向指定文件中写入一个字符串,其中字符串可以是字符常量,也可以是字符数组名,指针或者变量。
💭看例子
int main() { FILE* fp; char filename[30], str[30]; printf("输入文件名\n"); scanf("%s", filename); if ((fp = fopen(filename, "w")) == NULL) { perror("fopen"); } printf("输入字符串\n"); getchar(); gets(str); fputs(str, fp); fclose(fp); return 0; }
💡运行后如图