首页 > 其他分享 >C语言零基础入门-文件

C语言零基础入门-文件

时间:2022-10-18 16:06:35浏览次数:42  
标签:fp 文件 入门 路径 C语言 printf 打开 读取


C语言零基础入门-文件

这节课的主要内容:

1,文件的基本知识。

2,文件操作实例。



1. 基础知识

1.1 基础概念

1.1.1 文件

  • 这个概念不用说大家应该都知道是什么,虽然自己的定义可能不是很准确,但是大家应该都有着自己的理解。
  • 比如:txt文本文件,pdf文件,jpg,png等等,都是文件。

1.1.2 文件名组成

  • 文件名的组成有两部分:文件名+后缀。

文件名就是给文件起的名字。

后缀就是标识这个文件是什么类型的。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_02

  • 如图所示:"airplane_0627.off","临时.txt","1.ply"。
  • 图片中的文件名分别为"airplane_0627","临时","1"。
  • 每个文件对应的后缀就是:"off","txt","ply"。

1.1.3 电脑显示后缀

可能有很多的电脑看不到后缀,这是因为你没有打开,需要手动打开一下。

  • 这里以win10为例,win7以及其它系统自行百度。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_04

这样你就会发现你电脑中的文件都会有一个后缀了。

1.1.4 路径

路径分为两种:绝对路径,相对路径。

  • 绝对路径相当于就是你家的详细地址,不管你在哪里都可以找到的地址,比如:中国 / 广东省 / 东莞市 / 大朗镇 / xxx街道 / xxx号。
  • 相对路径就是相对于某一个参照点,而指出的路径。比如:你家在小红家向北走1000米,左转直走40米,再右转500米过一个马路就到了。

为什么要将路径呢?

  • 因为我们要在C语言中读取文件,那么文件肯定会有存放的路径,所以我们首先就要弄明白计算机的路径怎么玩。

在dos窗口中操作路径命令

  • 键盘按下 win+r 键。
  • 输入 cmd 回车。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_06

  • 进入到dos窗口

C语言零基础入门-文件_c语言

C语言零基础入门-文件_绝对路径_08

于是就可以在这里切换路径,体验一下绝对路径与相对路径了。

dos的基础命令:

  • dir:显示当前路径下有什么文件。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_10

  • cd命令:他是切换路径的命令。

在上边的图片中看到有一个 ".3T" 的的文件夹,于是使用cd切换进去。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_绝对路径_12

  • ../:上一级目录。

两个点一个斜杠配合cd使用的时候就是返回上一级目录。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_14

  • ./:当前目录。

一个点一个斜杠就是当前目录,经常在相对路径中使用。(为什么后边讲)

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_16

  • e: :切换到e盘。

直接输入盘符再加一个冒号,就直接进入不同的磁盘。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_绝对路径_18

你电脑有什么盘才可以进什么盘哦。

接下来就可以体验一下绝对路径与相对路径了。

> 绝对路径
  • 当前所在路径是:" F:\01-公众号文章\C语言 "

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_20

  • 但是在 "C:\Users\12170\Music" 路径中有一些音乐:

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_22

  • 首先需要将盘符切换到C盘。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_绝对路径_24

注意:绝对路径牵扯到盘符切换的,需要先切换盘符,然后在输入绝对路径才有效

  • 输入绝对路径:

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_26

  • 在实验一下其他路径:

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_28

只要同属于一个盘符,绝对路径可以畅行无阻。不同盘符需要先切换盘符。

> 相对路径
  • 假设此时有两个文件,文件A的路径是"C:\Users\12170\down\src\domain",文件B的路径是"C:\Users\12170\down\bin"。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_绝对路径_30

C语言零基础入门-文件_c语言_31

  • 当前目录在B文件所在的"C:\Users\12170\down\bin"目录,然后想要找到A的文件,就要先走到down目录(down在当前目录的上一级,所以输入 ../ 就是上一级)。

C语言零基础入门-文件_盘符_32

  • 在进入"src\domain",目录

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_34

  • 最后,以这个目录为参照,再返回到B目录。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_36

ok,路径完结。

1.2 文件基础

1.2.1 读写类型

读写类型分为两种:字符类型,字节类型。

  • 字符类型就是我们所谓的字符串类型。文字,程序等等字符类型的内容用 字符类型 读取。
  • 字节类型就是存放的文件是每一个个字节组成的。图片,视频,音频等等一般用 字节类型 读取。

读不懂没关系,记住什么文件用什么方式读就好了。

1.2.2 打开文件

  • 一个箱子里边存放有货物,如果想要取出获取就必须先打开箱子。
  • 文件也是这个原理,一个文件里边存放有内容,想要将文件中的内容读出就必须先打开文件。

打开文件例子:

  • 首先我在桌面新建一个 1.txt 的文本文件(你随意,只要绝对路径写对就可以)。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_38

  • 注意保存的时候保存为ASNI编码。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_绝对路径_40

C语言零基础入门-文件_盘符_41

在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。");
}
}

结果:

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_43

解释:

  • ​FILE *fp;​​定义了一个文件类型的指针,FILE是C语言内置的文件类型的数据结构。
  • ​fp = fopen(文件路径名,读取方式)​​,使用文件路径找到指定的文件,然后按照指定的读取方式打开文件,并且fp指向这个文件(相当于fp此时就是一个门,通过这个门就可以处理文件中的数据了)。
  • 读取方式就是你打算怎么操作这个文件:

  • r(只读)。r+(可读可写,但是文件必须存在)。
  • w(只写)。w+(可读可写,这会新建一个文件)。
  • a(追加)。
  • b(读写的是2进制文件)。还有一些模式大家自行了解。
  • 这些模式可以混搭的:

  • rb(只读,并且是以二进制的形式读入)。

  • wb(只写,并且是以二进制的形式写入)。

  • 等等。

C语言零基础入门-文件_盘符_44

提个醒:上边打开文件的方式,大家可以牢记,以后用文件这样打开就可以,只用更换路径与读取方式即可。

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");
}


结果:

C语言零基础入门-文件_c语言

C语言零基础入门-文件_绝对路径_46

解释:

  • ​feof(文件指针)​​是文件的一个特有方法,用来判断文件是否读取结束。
  • ​fgetc(fp)​​也是文件的一个特有方法,每次从文件指针fp中读取一个字符。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_48

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");
}


结果:

C语言零基础入门-文件_c语言

C语言零基础入门-文件_绝对路径_50

打开文件看看。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_52

解释:

  • 思路:从dos黑窗口中输入一串字符,这个字符串会被 getchar()函数 逐一获取里边的一个个字符,然后把一个个字符赋值给ch变量。
  • 紧接着,会判断ch中存放的当前字符是不是我们规定好的停止字符#,如果不是就会将当前ch中的字符写入文件,紧接着ch获取字符串中的下一个字符,再次判断是不是停止符号。如果是就会停止写入文件。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_54

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");
}


结果:

C语言零基础入门-文件_c语言

C语言零基础入门-文件_c语言_56

复制成功,也可以听(在顶部可以听听,JJ超棒的)。

分析:

  • 其实这里主要需要介绍两个二进制操作函数:fread与fwrite。
  • 其实就是:首先使用fread从fpIn指向的文件中读出一定量的字节数据放入buffer中。(一定量的意思是,最多读取buffer数组的最大长度的数据量,最小可以是0,是0的时候标识文件已经读完了。)
  • 之后,在使用fwrite函数将buffer中的字节数据写入fpOut指向的文件中,写入的数据量的大小是刚才读取的时候存放到buffer中的数据量rc。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_58

  • 函数分析。

C语言零基础入门-文件_c语言

C语言零基础入门-文件_盘符_60

3. 结束

C语言正式结束。恭喜大家,正式成为编程届的一份子。






C语言零基础入门-文件_盘符_61

标签:fp,文件,入门,路径,C语言,printf,打开,读取
From: https://blog.51cto.com/xiaoxiaojieya/5766885

相关文章

  • C语言零基础入门-结构体-01
    C语言零基础入门-结构体-01这节课的主要内容:1,什么是结构体。2,结构体的定义以及使用。1.什么是结构体这个问题就变得有意思了,为什么呢?因为他可以与我们之前的学习紧密相关了......
  • mybatis_17_根据properties元素的url属性指定的路径读取属性文件
    定义一个属性文件config.properties,文档结构示例:  文件内容示例:url=jdbc:postgresql://172.16.x.x:5432/database_name在mybatis-config2.xml的proeprties......
  • C语言零基础入门-06-习题
    C语言零基础入门-06-习题本节课的任务是: 布置5道指针的习题。习题01给定的5个整数(9,7,5,6,2),书写子函数进行排序,按照由小较大的顺序输出。要求:子函数之间数据传递使用指针进行。......
  • C语言零基础入门-指针-03
    C语言零基础入门-指针-03本节要点:1,指针操作int类型数据。2,指针操作float,char类型数据。01.指针操作int类型数据其实这一小节主要是带大家回顾一下,因为前边我们已经讲了很多......
  • 记录上传文件到mysql数据库中遇到的问题
    在开发一个Qt的界面程序,想把程序批量生成的数据文件上传进数据库中。最开始尝试将文件读到QByteArray类型的变量中,插入数据表的mediumblob类型里,但是插不了,数据表结果一直......
  • C语言零基础入门-指针-04
    C语言零基础入门-指针-04本节要点:1,指向一维数组的指针。2,指向二维数组的指针。3,指针的输出练习。01.指向一维数组的指针有意思的来了,指针指向数组的情况非常常见,同样也是一......
  • mybatis_16_根据properties元素中的resource属性读取类路径下属性文件
    新建属性文件config.properties,文件结构如下:  在config.properties中定义属性,示例:url=jdbc:postgresql://172.16.x.x:5432/database_name在mybatis-config2.......
  • 傻瓜式midi文件转换成mp3软件分享!
    Midi音乐文件转MP3工具软件分享。mid格式是由MIDI继承而来。MID文件是记录声音的信息,然后告诉声卡如何再现音乐的一组指令。mid格式的最大用处是在电脑作曲领域。mid文件可......
  • 关于51单片机C语言中的data,idata,xdata,pdata,code
    转自:​​http://www.baobaoshequ.com/article/4584​​从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类......
  • C语言结构体的声明
    结构体声明的几种方式1.先声明结构体类型,再定义结构体变量structBook{};/结构体变量定义/structBookbook1;//book1为结构体变量。2.声明结构体类型,同时定义结......