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 路径
路径分为两种:绝对路径,相对路径。
相对路径就是相对于某一个参照点,而指出的路径。比如:你家在小红家向北走1000米,左转直走40米,再右转500米过一个马路就到了。
为什么要将路径呢?
因为我们要在C语言中读取文件,那么文件肯定会有存放的路径,所以我们首先就要弄明白计算机的路径怎么玩。
在dos窗口中操作路径命令:
键盘按下 win r 键。
输入 cmd 回车。
进入到dos窗口
于是就可以在这里切换路径,体验一下绝对路径与相对路径了。
dos的基础命令:
dir:显示当前路径下有什么文件。
cd命令:他是切换路径的命令。
在上边的图片中看到有一个 “.3T” 的的文件夹,于是使用cd切换进去。
../:上一级目录。
两个点一个斜杠配合cd使用的时候就是返回上一级目录。
./:当前目录。
一个点一个斜杠就是当前目录,经常在相对路径中使用。(为什么后边讲)
e: :切换到e盘。
直接输入盘符再加一个冒号,就直接进入不同的磁盘。
你电脑有什么盘才可以进什么盘哦。
接下来就可以体验一下绝对路径与相对路径了。
> 绝对路径
但是在 “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语言正式结束。恭喜大家,正式成为编程届的一份子。