c++ 怎么读取rtf文件_C语言零基础入门文件
发布日期:2022-02-04 03:25:50 浏览次数:9 分类:技术文章

本文共 4216 字,大约阅读时间需要 14 分钟。

C语言零基础入门-文件

这节课的主要内容:

1,文件的基本知识。

2,文件操作实例。


1. 基础知识

1.1 基础概念

1.1.1 文件

  • 这个概念不用说大家应该都知道是什么,虽然自己的定义可能不是很准确,但是大家应该都有着自己的理解。

  • 比如:txt文本文件,pdf文件,jpg,png等等,都是文件。

1.1.2 文件名组成

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

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

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

29abe8191ef7a2ab4d4e73b40597893d.png

742c2716f30c550feedfe26986ae6d54.png

  • 如图所示:"airplane_0627.off","临时.txt","1.ply"。

  • 图片中的文件名分别为"airplane_0627","临时","1"。

  • 每个文件对应的后缀就是:"off","txt","ply"。

1.1.3 电脑显示后缀

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

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

29abe8191ef7a2ab4d4e73b40597893d.png

6a8ebb47982903a6b7d173006b0abad3.png

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

1.1.4 路径

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

  • 绝对路径相当于就是你家的详细地址,不管你在哪里都可以找到的地址,比如:中国 / 广东省 / 东莞市 / 大朗镇 / xxx街道 / xxx号。

  • 相对路径就是相对于某一个参照点,而指出的路径。比如:你家在小红家向北走1000米,左转直走40米,再右转500米过一个马路就到了。

为什么要将路径呢?

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

在dos窗口中操作路径命令

  • 键盘按下 win+r 键。

  • 输入 cmd 回车。

29abe8191ef7a2ab4d4e73b40597893d.png

c941112b8ed1fa5b249ec2708869f133.png

  • 进入到dos窗口

29abe8191ef7a2ab4d4e73b40597893d.png

ddcbaf38bf1eae27167fb9bb8ab58266.png

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

dos的基础命令:

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

29abe8191ef7a2ab4d4e73b40597893d.png

21059c948417fd67060827222315d619.png

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

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

29abe8191ef7a2ab4d4e73b40597893d.png

e67308b1e8032ddb13ca2e52ff40742d.png

  • ../:上一级目录。

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

29abe8191ef7a2ab4d4e73b40597893d.png

a9d6b0a1b873797fe601f34016a211c1.png

  • ./:当前目录。

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

29abe8191ef7a2ab4d4e73b40597893d.png

3ff9c774fd08200a4863a5f6867b07c8.png

  • e: :切换到e盘。

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

29abe8191ef7a2ab4d4e73b40597893d.png

d7868abaff2418daf476d9b885147903.png

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

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

> 绝对路径

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

29abe8191ef7a2ab4d4e73b40597893d.png

4e6b67c523ece1f5099710350fd83e4b.png

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

29abe8191ef7a2ab4d4e73b40597893d.png

f65fe4e313a697b0bd1f59f9f777f6c8.png

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

29abe8191ef7a2ab4d4e73b40597893d.png

4839a4423b0fa2b140bfb0466164d353.png

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

  • 输入绝对路径:

29abe8191ef7a2ab4d4e73b40597893d.png

9d4ec0fab4c79c1c94b6aea80e0ff6dd.png

  • 在实验一下其他路径:

29abe8191ef7a2ab4d4e73b40597893d.png

8a0787f34df945f88d80e57aae31c485.png

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

> 相对路径

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

29abe8191ef7a2ab4d4e73b40597893d.png

2fd0b4a5c66ad2b0a0100363bd504bc2.png

8a1f046eba8204c44a0d762c6b04eb07.png

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

64e105810a87ed7d25b72be0193d5e28.png

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

29abe8191ef7a2ab4d4e73b40597893d.png

ffefb4ce704e628a1c6ca3d62e6cc007.png

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

29abe8191ef7a2ab4d4e73b40597893d.png

d36b95c46d4b975491fb2402f3c0490a.png

ok,路径完结。

1.2 文件基础

1.2.1 读写类型

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

  • 字符类型就是我们所谓的字符串类型。文字,程序等等字符类型的内容用 字符类型 读取。

  • 字节类型就是存放的文件是每一个个字节组成的。图片,视频,音频等等一般用 字节类型 读取。

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

1.2.2 打开文件

  • 一个箱子里边存放有货物,如果想要取出获取就必须先打开箱子。

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

打开文件例子:

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

29abe8191ef7a2ab4d4e73b40597893d.png

26d09f0963a6eaaf33b70a474ec1f5e8.png

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

29abe8191ef7a2ab4d4e73b40597893d.png

d7709b442e0194169a9acb1bf3f28332.png

3a348223b4d96e68c505f215cb08087c.png

在win电脑中使用C语言读取的文件都应该是ANSI编码。至于为什么就说来话长了。以后用到了再说吧。

代码:

还要注意一点,编程语言中的路径斜杠与计算机中的路径斜杠方向相反。

#includevoid main(){
FILE *fp; if( (fp = fopen("C:/Users/12170/Desktop/1.txt","r")) == NULL){
printf("文件打开错误。"); return; }else{
printf("文件打开SUCCESS。"); }}

结果:

29abe8191ef7a2ab4d4e73b40597893d.png

e4c29b65591143eb09db9e08ecc0057b.png

解释:

  • FILE *fp;定义了一个文件类型的指针,FILE是C语言内置的文件类型的数据结构。

  • fp = fopen(文件路径名,读取方式),使用文件路径找到指定的文件,然后按照指定的读取方式打开文件,并且fp指向这个文件(相当于fp此时就是一个门,通过这个门就可以处理文件中的数据了)。

  • 读取方式就是你打算怎么操作这个文件:

    • r(只读)。r+(可读可写,但是文件必须存在)。

    • w(只写)。w+(可读可写,这会新建一个文件)。

    • a(追加)。

    • b(读写的是2进制文件)。还有一些模式大家自行了解。

  • 这些模式可以混搭的:

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

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

    • 等等。

922b0df988b547f73fad7200210a0bfd.png

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

1.2.3 读字符文件

当获取到文件的指针fp之后,就可以为所欲为了。

程序:

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

结果:

29abe8191ef7a2ab4d4e73b40597893d.png

e0ddb496b62ea4f588397014c5988a24.png

解释:

  • feof(文件指针)是文件的一个特有方法,用来判断文件是否读取结束。

  • fgetc(fp)也是文件的一个特有方法,每次从文件指针fp中读取一个字符。

29abe8191ef7a2ab4d4e73b40597893d.png

aba8eeb60d908710e0aae9dbab850ff0.png

1.2.4 写字符文件

程序:

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

结果:

29abe8191ef7a2ab4d4e73b40597893d.png

ecf7bfc438c5154d7b70ea4aace58e92.png

打开文件看看。

29abe8191ef7a2ab4d4e73b40597893d.png

0792f26668fc812d8ff834deccd1e429.png

解释:

  • 思路:从dos黑窗口中输入一串字符,这个字符串会被 getchar()函数 逐一获取里边的一个个字符,然后把一个个字符赋值给ch变量。

  • 紧接着,会判断ch中存放的当前字符是不是我们规定好的停止字符#,如果不是就会将当前ch中的字符写入文件,紧接着ch获取字符串中的下一个字符,再次判断是不是停止符号。如果是就会停止写入文件。

29abe8191ef7a2ab4d4e73b40597893d.png

54c0dbc19662ad151bd78ee2c3a40598.png

2. 字节文件实战

目的:

  • 用C语言实现文件复制的功能,将指定的音乐复制一份到桌面。

分析:

  • 前文说过,音乐,视频属于二进制文件。读写的时候对文件的操作模式需要加上“b”。

  • 完成音乐的复制,其实就是将原始音乐文件读取之后,再写入到指定文件中就好了。

程序:

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

结果:

29abe8191ef7a2ab4d4e73b40597893d.png

2e8fe4eab488032ff63bdbd947bff3fe.png

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

分析:

  • 其实这里主要需要介绍两个二进制操作函数:fread与fwrite。

  • 其实就是:首先使用fread从fpIn指向的文件中读出一定量的字节数据放入buffer中。(一定量的意思是,最多读取buffer数组的最大长度的数据量,最小可以是0,是0的时候标识文件已经读完了。)

  • 之后,在使用fwrite函数将buffer中的字节数据写入fpOut指向的文件中,写入的数据量的大小是刚才读取的时候存放到buffer中的数据量rc。

29abe8191ef7a2ab4d4e73b40597893d.png

99085bff0ce79a73a1176705f1ca89c1.png

  • 函数分析。

29abe8191ef7a2ab4d4e73b40597893d.png

844be574ad8e96f8ee7bd183d2789e2c.png

3. 结束

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

b6cafe42ca39822cf81c4c367b5de5fa.png

转载地址:https://blog.csdn.net/weixin_39626369/article/details/111172351 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ubuntu 最新提权漏洞_利用mssql受信用数据库提权
下一篇:python numpy 转置_python numpy.transpose(np.T) 详解

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月17日 09时23分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

matlab 50hzquchu,新手求消除50HZ工频干扰陷波滤波器源程序 2019-04-21
laravel没有route.php,Laravel中的RouteCollection.php中的NotFoundHttpException 2019-04-21
php服务端开启socket,php socket服务端能不能在网页端开启?而不是只能用CLI模式开启... 2019-04-21
php不需要也能输出,php 如何只输出最后生成的那个值?? 2019-04-21
php正则过滤sql关键字,使用正则表达式屏蔽关键字的方法 2019-04-21
php取整v,php取整方式分享 2019-04-21
php写模糊搜索api接口,php通过sphinxapi接口实现全文搜索 2019-04-21
oracle安装出现2932,【案例】Oracle报错ORA-19815 fast_recovery_area无剩余空间解决办法... 2019-04-21
rac数据库下oracle打小补丁,Oracle 11g RAC 环境打PSU补丁的详细步骤 2019-04-21
form表单属性名相同java_form表单提交时候有多个相同name 的input如何处理? 2019-04-21
java图片加气泡文字_图片加气泡文字 2019-04-21
java总结i o流_14.java总结I/O流 2019-04-21
java和历转为西历_日期转西暦,和暦 2019-04-21
java 远程 yarn jar_再论Yarn Client和Yarn cluster 2019-04-21
java单元测试断言_单元测试+断言 2019-04-21
java 创建压缩包_用Java创建ZIP压缩文件 2019-04-21
java typedarray_TintTypedArray.java 2019-04-21
java字符字面量_java – 字符串字面量的行为是令人困惑的 2019-04-21
php判断数组的值是否为空,PHP判断数组是否为空的常用方法(五种方法) 2019-04-21
php 读数据库,PHP数据库 2019-04-21