C语言零基础入门-文件
这节课的主要内容:
1,文件的基本知识。
2,文件操作实例。
1. 基础知识
1.1 基础概念
1.1.1 文件
- 这个概念不用说大家应该都知道是什么,虽然自己的定义可能不是很准确,但是大家应该都有着自己的理解。
- 比如:txt文本文件,pdf文件,jpg,png等等,都是文件。
1.1.2 文件名组成
- 文件名的组成有两部分:文件名+后缀。
文件名就是给文件起的名字。
后缀就是标识这个文件是什么类型的。
- 如图所示:"airplane_0627.off","临时.txt","1.ply"。
- 图片中的文件名分别为"airplane_0627","临时","1"。
- 每个文件对应的后缀就是:"off","txt","ply"。
1.1.3 电脑显示后缀
可能有很多的电脑看不到后缀,这是因为你没有打开,需要手动打开一下。
- 这里以win10为例,win7以及其它系统自行百度。
这样你就会发现你电脑中的文件都会有一个后缀了。
1.1.4 路径
路径分为两种:绝对路径,相对路径。
- 绝对路径相当于就是你家的详细地址,不管你在哪里都可以找到的地址,比如:中国 / 广东省 / 东莞市 / 大朗镇 / xxx街道 / xxx号。
- 相对路径就是相对于某一个参照点,而指出的路径。比如:你家在小红家向北走1000米,左转直走40米,再右转500米过一个马路就到了。
为什么要将路径呢?
- 因为我们要在C语言中读取文件,那么文件肯定会有存放的路径,所以我们首先就要弄明白计算机的路径怎么玩。
在dos窗口中操作路径命令:
- 键盘按下 win+r 键。
- 输入 cmd 回车。
- 进入到dos窗口
于是就可以在这里切换路径,体验一下绝对路径与相对路径了。
dos的基础命令:
- dir:显示当前路径下有什么文件。
- cd命令:他是切换路径的命令。
在上边的图片中看到有一个 ".3T" 的的文件夹,于是使用cd切换进去。
- ../:上一级目录。
两个点一个斜杠配合cd使用的时候就是返回上一级目录。
- ./:当前目录。
一个点一个斜杠就是当前目录,经常在相对路径中使用。(为什么后边讲)
- e: :切换到e盘。
直接输入盘符再加一个冒号,就直接进入不同的磁盘。
你电脑有什么盘才可以进什么盘哦。
接下来就可以体验一下绝对路径与相对路径了。
> 绝对路径
- 当前所在路径是:" F:\01-公众号文章\C语言 "
- 但是在 "C:\Users\12170\Music" 路径中有一些音乐:
- 首先需要将盘符切换到C盘。
注意:绝对路径牵扯到盘符切换的,需要先切换盘符,然后在输入绝对路径才有效
- 输入绝对路径:
- 在实验一下其他路径:
只要同属于一个盘符,绝对路径可以畅行无阻。不同盘符需要先切换盘符。
> 相对路径
- 假设此时有两个文件,文件A的路径是"C:\Users\12170\down\src\domain",文件B的路径是"C:\Users\12170\down\bin"。
- 当前目录在B文件所在的"C:\Users\12170\down\bin"目录,然后想要找到A的文件,就要先走到down目录(down在当前目录的上一级,所以输入 ../ 就是上一级)。
- 在进入"src\domain",目录
- 最后,以这个目录为参照,再返回到B目录。
ok,路径完结。
1.2 文件基础
1.2.1 读写类型
读写类型分为两种:字符类型,字节类型。
- 字符类型就是我们所谓的字符串类型。文字,程序等等字符类型的内容用 字符类型 读取。
- 字节类型就是存放的文件是每一个个字节组成的。图片,视频,音频等等一般用 字节类型 读取。
读不懂没关系,记住什么文件用什么方式读就好了。
1.2.2 打开文件
- 一个箱子里边存放有货物,如果想要取出获取就必须先打开箱子。
- 文件也是这个原理,一个文件里边存放有内容,想要将文件中的内容读出就必须先打开文件。
打开文件例子:
- 首先我在桌面新建一个 1.txt 的文本文件(你随意,只要绝对路径写对就可以)。
- 注意保存的时候保存为ASNI编码。
在win电脑中使用C语言读取的文件都应该是ANSI编码。至于为什么就说来话长了。以后用到了再说吧。
代码:
还要注意一点,编程语言中的路径斜杠与计算机中的路径斜杠方向相反。
#include<stdio.h>
void main(){
FILE *fp;
if( (fp = fopen("C:/Users/12170/Desktop/1.txt","r")) == NULL){
printf("文件打开错误。");
return;
}else{
printf("文件打开SUCCESS。");
}
}
结果:
解释:
-
FILE *fp;
定义了一个文件类型的指针,FILE是C语言内置的文件类型的数据结构。 -
fp = fopen(文件路径名,读取方式)
,使用文件路径找到指定的文件,然后按照指定的读取方式打开文件,并且fp指向这个文件(相当于fp此时就是一个门,通过这个门就可以处理文件中的数据了)。 - 读取方式就是你打算怎么操作这个文件:
- r(只读)。r+(可读可写,但是文件必须存在)。
- w(只写)。w+(可读可写,这会新建一个文件)。
- a(追加)。
- b(读写的是2进制文件)。还有一些模式大家自行了解。
这些模式可以混搭的:
rb(只读,并且是以二进制的形式读入)。
wb(只写,并且是以二进制的形式写入)。
等等。
提个醒:上边打开文件的方式,大家可以牢记,以后用文件这样打开就可以,只用更换路径与读取方式即可。
1.2.3 读字符文件
当获取到文件的指针fp之后,就可以为所欲为了。
程序:
#include<stdio.h>
void main(){
FILE *fp;
if(( fp = fopen("C:/Users/12170/Desktop/1.txt","r") ) == NULL){
printf("文件打开错误。\n");
return;
}else{
printf("文件打开SUCCESS。\n");
}
while( !feof(fp) ){
printf("%c", fgetc(fp));
}
fclose(fp);
printf("\n");
}
结果:
解释:
-
feof(文件指针)
是文件的一个特有方法,用来判断文件是否读取结束。 -
fgetc(fp)
也是文件的一个特有方法,每次从文件指针fp中读取一个字符。
1.2.4 写字符文件
程序:
#include<stdio.h>
void main(){
FILE *fp;
if(( fp = fopen("C:/Users/12170/Desktop/filename.txt","w+") ) == NULL){
printf("文件打开错误。\n");
return;
}else{
printf("文件打开SUCCESS。\n");
}
char ch = getchar();
while( ch != '#' ){
fputc(ch, fp);
ch = getchar();
}
fclose(fp);
printf("\n");
}
结果:
打开文件看看。
解释:
- 思路:从dos黑窗口中输入一串字符,这个字符串会被 getchar()函数 逐一获取里边的一个个字符,然后把一个个字符赋值给ch变量。
- 紧接着,会判断ch中存放的当前字符是不是我们规定好的停止字符#,如果不是就会将当前ch中的字符写入文件,紧接着ch获取字符串中的下一个字符,再次判断是不是停止符号。如果是就会停止写入文件。
2. 字节文件实战
目的:
- 用C语言实现文件复制的功能,将指定的音乐复制一份到桌面。
分析:
- 前文说过,音乐,视频属于二进制文件。读写的时候对文件的操作模式需要加上“b”。
- 完成音乐的复制,其实就是将原始音乐文件读取之后,再写入到指定文件中就好了。
程序:
#include<stdio.h>
void main(){
FILE *fpIn;
FILE *fpOut;
if(( fpIn = fopen("C:/Users/12170/Music/林俊杰-将故事写成我们.mp3","rb") ) == NULL){
printf("输入文件打开错误。\n");
return;
}else{
printf("输入文件打开SUCCESS。\n");
}
if(( fpOut = fopen("C:/Users/12170/Desktop/将故事写成我们.mp3","wb+") ) == NULL){
printf("输出文件打开错误。\n");
return;
}else{
printf("输出文件打开SUCCESS。\n");
}
unsigned char buf[1024];
int rc;
while( (rc = fread(buf,sizeof(unsigned char), 1024,fpIn)) != 0 ){
fwrite( buf, sizeof( unsigned char ), rc, fpOut );
}
fclose(fpIn);
fclose(fpOut);
printf("\n");
}
结果:
复制成功,也可以听(在顶部可以听听,JJ超棒的)。
分析:
- 其实这里主要需要介绍两个二进制操作函数:fread与fwrite。
- 其实就是:首先使用fread从fpIn指向的文件中读出一定量的字节数据放入buffer中。(一定量的意思是,最多读取buffer数组的最大长度的数据量,最小可以是0,是0的时候标识文件已经读完了。)
- 之后,在使用fwrite函数将buffer中的字节数据写入fpOut指向的文件中,写入的数据量的大小是刚才读取的时候存放到buffer中的数据量rc。
- 函数分析。
3. 结束
C语言正式结束。恭喜大家,正式成为编程届的一份子。