学了一年的C语言了,现在回过头来做一下总结。并且博客开了挺长一段时间却没有谢什么实际的东西。现在做下总结,对之后的学习帮助应该挺大的。与大家共勉!

现在,我先来介绍一下C语言的文件读取与写入的原理和具体操作方法。

C语言文件读取与写入是通过将文件看成一个字符序列进行读入和写出的。所以读取与写入文件就用到了指针,而这个指针是一个特殊的指针,我们称为文件指针。

指针名称是:FILE

对指针进行的文件打开操作是fopen。

引用百度百科对fopen这个函数进行介绍

函数简介

函数原型:FILE * fopen(const char * path,const char * mode);
返回值:文件顺利打开后, 指向该流的 文件指针就会被返回。如果文件打开失败则返回NULL,并把 错误代码存在 errno中。
一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
参数说明:
参数path 字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态 字符串:
r 以 只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个 二进制文件,允许读写数据,文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。( EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个 二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
wx 创建文本文件,只允许写入数据.[C11]
wbx 创建一个二进制文件,只允许写入数据.[C11]
w+x 创建一个文本文件,允许读写.[C11]
wb+x 创建一个二进制文件,允许读写.[C11]
w+bx 和"wb+x"相同[C11]
以x结尾的模式为独占模式,文件已存在或者无法创建(一般是路径不正确)都会导致fopen失败.文件以操作系统支持的独占模式打开. [C11]
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以 文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考 umask值。
有些C 编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。

接下来我就通过实例来给大家一个直观的了解

#include<stdio.h>
int main()
{
FILE *fp=NULL;
char ch;
//打开文件
fp = fopen("C:\\Users\\Administrator\\Desktop","r");
//第一个双引号里面放的是文件具体路径,第二个是对文件进行的操作

//判断文件是否成功打开
if(fp==NULL)
{
printf("文件打开失败");
return 0;
} //如果文件能成功打开,函数返回值不为NULL
ch=getc(fp); //对文件内容进行字符读取
while(ch!=EOF)  //EOF可以看做是文件结尾,值可以看做-1 
//换种方式可以用
//while(!feof(fp))

{
ch = getc(fp)
putchar(ch);

//关闭文件
fclose(fp);
return 0; 
}

//模拟文件读写操作

#include<stdio.h>

char mygetc(char *);
int i=0;
int main()
{
char *fp="ilovec";
char ch=0;
ch=mygetc(fp);
while(ch!='\0')
{
putchar(ch);
ch=mygetc(fp);
// putchar(mygetc(fp));

}
return 0; 
}

char mygetc(char *c)
{
return *(c+i++);
}

//用fgets读出文件

#include<stdio.h>
int main()
{
FILE *fp=NULL;
char str[100]={0};
//打开文件
fp = fopen("C:\\Users\\Administrator\\Desktop","r");
//第一个双引号里面放的是文件具体路径,第二个是对文件进行的操作

//判断文件是否成功打开
if(fp==NULL)
{
printf("文件打开失败");
return 0;
} //如果文件能成功打开,函数返回值不为NULL

fgets(str,100,fp);

printf("%s",str); 
//关闭文件
fclose(fp);
return 0; 
}

#include<stdio.h>
int main()
{
FILE *fp=NULL;
char str[100]={0};
//打开文件
fp = fopen("C:\\Users\\Administrator\\Desktop","r");
//第一个双引号里面放的是文件具体路径,第二个是对文件进行的操作

//判断文件是否成功打开
if(fp==NULL)
{
printf("文件打开失败");
return 0;
}  //如果文件能成功打开,函数返回值不为NULL

while(!feof)

{
strnset(str,'\0',100); //可以不用

printf("%s",fgets(str,100,fp));


//关闭文件
fclose(fp);
return 0; 
}

//文件写入

#include<stdio.h>
int main()
{
FILE *fp=NULL;
char ch;
//打开文件
fp = fopen("C:\\Users\\Administrator\\Desktop","w"); //w是对文件进行写操作 
//第一个双引号里面放的是文件具体路径,第二个是对文件进行的操作

//判断文件是否成功打开
if(fp==NULL)
{
printf("文件打开失败");
return 0;
} //如果文件能成功打开,函数返回值不为NULL

fputs("字符串内容",fp);

//关闭文件
fclose(fp);
return 0; 
}

补充内容:

用stdin和stdout重定向输入输出流

具体用法比较简单

fopen("文件路径","r",stdin);

fopen("文件路径","w",stdout);

要放输入输出语句前面

C语言的文件读取与写入操作相关推荐

  1. Verilog中testbench的设计,文件读取和写入操作

    1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应. 端口分为 input,output 和 inout 类型产生激励信号的时候, input 对应的端口应当 ...

  2. testbench的设计 文件读取和写入操作 源代码

    十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应. 端口分为 input,output 和 inout 类型产生激励信号的 ...

  3. python对文件的读操作有哪些方法-Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...

  4. python对文件的读操作方法有哪些-Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...

  5. java创建读取文件_Java实现文件的创建、读取、写入操作-Fun言

    在日常的开发中,对文件的操作经常会有,所以今天教大家其中一种使用Java实现文件的创建.读取.写入操作 创建文件String filenameTemp = "D:\demo.txt" ...

  6. c语言文件读取与写入

    fopen的介绍转自百度百科:https://baike.baidu.com/item/fopen/10942321?fr=aladdin 函数原型: FILE * fopen(const char ...

  7. xml 和android脚本之家,Android利用Document实现xml读取和写入操作

    本文实例为大家分享了利用Document实现xml读取和写入操作,供大家参考,具体内容如下 首先先来介绍一下什么xml?xml是可扩展标记语言,他可以用来标记数据,定义数据类型.是一种允许用户对自己标 ...

  8. vivado仿真 文件读取和写入

    vivado仿真 文件读取和写入 读取文件 首先创建一个TXT文件. $readmemb和$readmemh用来从文件中读取数据到存储器中.其中readmemb要求每个数字是二进制数,readmemh ...

  9. c#大文件读取和写入数据库

    c#大文件读取和写入数据库(带进度条的源代码) 最近一个项目需要将大文件写入和读取到数据库,觉得可能很多人也需要相关得东西,所以就将代码帖出来 protected int state = 0; //表 ...

最新文章

  1. Windows Phone开发(18):变形金刚第九季——变换
  2. linux 卸载aria2,Linux Mint 19下安装aria2的过程完整总结
  3. 基于zookeeper实现的分布式锁
  4. 自制“低奢内”CSS3注册表单,包含JS验证哦。请别嫌弃,好吗?。
  5. Hibernate注释大全
  6. 笨办法学 Python · 续 练习 24:URL 快速路由
  7. Hadoop1.0.4单节点StandAlone及Pseudo-Distributed部署方法
  8. 内存泄露和溢出的区别_Java 中的内存溢出和内存泄露是什么?我给你举个有味道的例子?...
  9. 新技能,利用Reflector来修改dll引用
  10. 陶哲轩实分析 命题7.2.5 证明
  11. Microsoft Endpoint Protection for Windows Azure客户技术预览版可供免费下载
  12. Financial knowledge
  13. python处理xps文件,从XPS文档中提取文本
  14. linux shell 内存利用率,linux上使用shell脚本查看内存使用率
  15. 【校招VIP】产品思维考察之如何做市场分析
  16. 举例说明神经网络在人工智能的应用
  17. 婚宴座位图html5,婚礼酒席座位该怎么安排好?婚宴座位安排图解
  18. python代码能做成软件步骤与异常情况mac
  19. mysql dbi dbd_安装DBI和DBD包
  20. excel作图如何取最近一段时间的数据

热门文章

  1. 对齐次线性方程组同解充要条件的新理解
  2. Java-List集合元素筛选
  3. js中在另一个页面打开ppt、word
  4. 9.6 矩阵的条件数
  5. CycleGan人脸转为漫画脸,牛掰的知识又增加了!| 附代码
  6. Centos7安装mysql-5.7.18-1.el7.x86_64.rpm-bundle.tarCentos7安装mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
  7. android 虚拟键盘高度,获取Android中虚拟键盘的高度
  8. python水位传感器输出水位_水位传感器坏了的表现_判断水位传感器好坏方法
  9. 考上好大学,然后进入IT行业是穷人孩子晋级中产的唯一出路?
  10. 消息中间件架构面面观