关于C语言的文件操作之前我也写过一篇博客来介绍,但是当时写的很不全面,只是简单的使用了一下 ,今天再从新学习一下。

1、文件的写

首先还是先看一个简单的例子:

include<stdio.h>

int main()
{
FILE *fp; //声明一个文件指针,指向文件缓冲区的首地址
char ch; if( (fp = fopen("file_1.txt","a")) == NULL ) //w+打开可读写文件,若文件存在则清零,不存在则新建文件,a 模式不清零
{
printf("Cannot open file, press any key to exit!"); //文件无法打开
} printf("Input a string:\n"); while ((ch = getchar()) != '\n' )
{
putc(ch,fp); //该函数将字符写入文件,与 fputc 的区别?
} fclose(fp); return ;
}

这个例子就是实现打开或新建一个文本文件,然后写入用户在控制台输入的数据。

关于文件操作首先是:

FILE *fp;

这个FILE是文件类型标识符,是C编译系统定义好的一个结构体类型,结构体中含有文件名、文件状态等信息。
其定义一个指针变量fp,该变量用于指向一个文件,存放的是文件缓冲区的首地址。该指针又叫文件指针

文件指针是一个指向文件开头的指针。使用文件指针,我们可以打开或者关闭一个文件,同时,我们也可以使用文件指针将数据的读写位置移动到文件的任意字节位置。

然后使用fopen函数打开或新建一个文件:

fopen() 函数用来打开一个文件,该函数接受两个字符串类型的参数:文件名(filename)、打开模式(open mode)
fopen("filename","open mode")
当使用该函数打开一个文件时,返回一个指针,该指针指向文件的开始位置,称为文件指针,
那么为了接收它返回的文件指针,我们需要事先声明一个文件指针: FILE *fp
如果因为某些系统内部原因导致文件无法打开,则函数返回空指针 NULL
所以为了避免文件打开失败导致的程序异常,打开文件一般按照如下格式:

   if( (fp = fopen("file_1.txt","a")) == NULL ) //w+打开可读写文件,若文件存在则清零,不存在则新建文件,a 模式不清零
{
printf("Cannot open file, press any key to exit!"); //文件无法打开
}

关于文件打开的模式,我在上一篇文件操作的博客中详细介绍了,链接:http://www.cnblogs.com/qsyll0916/p/7892738.html

在下面就是获取用户输入,使用一个while循环持续的获取输入,

    while ((ch = getchar()) != '\n' )
{
putc(ch,fp);
}

再此使用 \n 作为结束标志,即只能在控制台输入一行字符串,
若使用EOF,则可以多行输入,用 ctrl+z 表示输入结束,该组合键代表标准输入文件的结束。

下一句   putc(ch,fp);  就是吧用户输入的字符写入文件,注意这里是一个字符一个字符写入的,因为输入用的是getchar函数,如果是字符串输入写入的话,可以使用 fputc()函数直接写入一个字符串。

最后也是非常重要的一部,对文件读写完毕后需要关闭文件,防止文件打开过多造成的文件读写混乱。

使用  fclose()函数关闭一个文件,

关闭文件,正常关闭时返回0,否则返回1
关闭时,系统会清除缓冲区,并把数据输出到磁盘文件,释放缓冲单元,使文件指针与具体文件脱钩。

    fclose(fp);    

2、文件的读

到这里关于文件的写操作就基本上是这些,下面是关于文件的读操作,其实和写差不多。

还是先看一下完整的代码,方便和上面的写操作对比:

#include <stdio.h>
#include <stdlib.h> int main()
{
FILE *fp;
char ch;
char str[];
char file_name[]; //输入文件名称缓冲 //如果文件和本程序在同一个文件下面,则直接输入txt文件名即可
//如果不在同一目录下面,则需要输入完整文件路径格式
//如 : e:\\test.txt printf("please enter the filename: "); //注意输入文件名时需要带上文件的后缀.txt gets(file_name); //gets函数用来读取用户输入的字符串,专门针对字符串处理设计的 if((fp = fopen(file_name,"r")) == NULL ) //r模式不能写入数据,只能读取
{
printf("Cannot open file, press any key to exit!\n"); //文件无法打开
exit();
} /*
while( (ch = getc(fp)) != EOF ) //getc函数从文件中读取单个字符
{
putchar(ch); //循环输出单个字符
}
putchar('\n'); //输出一个换行
*/ while((fgets(str,,fp)) != NULL)
puts(str); fclose(fp);
}

开始的打开文件方式和写操作的差不多,就是多了一个用户自己输入文件的路径和名称。

然后程序用了两种方式来读取文件内容,一个是使用fgetc函数读取单个字符,然后输出,一直循环,直到读取到文件的末尾。

另一种方式是使用特殊的   fgets()  函数来一次性读取80个字节的内容:

fgets   函数从 fp 文件中读取 80 个字节的数据到str数组中,然后用 puts 函数输出。

当到达文件末尾时, 函数返回 NULL,若要持续读出字符串,则循环检测每次读出80个字节后是否到达文件末尾。

关于文件的操作还有很多深入的内容,后面学习了之后再继续分享。。。。。。。

关于C语言文件操作的更多相关文章

  1. go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

    go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...

  2. C语言文件操作

    C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作. 操作文件,我们得需要知道什么?当然是路径和文件名. 首先我需要知道我操作的文件在哪里,叫什么名字.在C语言中还存在一个打开方 ...

  3. C 语言文件操作

    C 语言文件操作 1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...

  4. C语言文件操作函数

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...

  5. C语言文件操作解析(五)之EOF解析(转载)

      C语言文件操作解析(五)之EOF解析 在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符.但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特 ...

  6. 【转】C语言文件操作解析(三)

    原文网址:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html C语言文件操作解析(三) 在前面已经讨论了文件打开操作, ...

  7. C语言文件操作函数大全(超详细)

    C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下   fopen(打开文件)相关函数 open,fc ...

  8. C语言文件操作 FILE结构体

    内存中的数据都是暂时的,当程序结束时,它们都将丢失.为了永久性的保存大量的数据,C语言提供了对文件的操作. 1.文件和流 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特 ...

  9. C语言文件操作相关函数

    在实际应用中,我们往往需要对文件进行操作,下面我将介绍C语言的一些关于操作文件的函数. 一.计算机文件 计算机文件是以计算机硬盘为载体存储在计算机上的信息集合,是存储在某种长期储存设备上的一段数据流. ...

随机推荐

  1. 输入和输出--javase中的路径

    就目前为止, javase中经常用到路径来读取一个资源文件的所有情况都已经整理在博客里面了,这里做一个统一的整理: 1,IO流来读取一个文件,比如说new FileInputStream(" ...

  2. Spring中Quartz的配置及corn表达式

    Quartz可以用来执行任务调度功能,如间隔一定时间调用执行任务.用起来还是蛮方便的.只要将你要调用的类配置到Spring配置文件即可. 在Spring的配置文件中配置Quartz. <!-- ...

  3. restful 风格的理解

    rest   其实就是representation    status   transfer(表现层状态转换) restful 风格的API具有如下特征: 1. 每个URI  包含一种资源,而且URI ...

  4. android dialog弹出的情况下监听返回键

    view = LayoutInflater.from(getActivity()).inflate( R.layout.dialog_tips, null); title2 = (TextView) ...

  5. 嵌套for in循环组合cat方式文件中包含空格问题

    关于循环嵌套使用for循环的空格问题 原创不易,转载请注明 需求: 现有两个功文件,需要将文件拼接 [root@localhost ~]# cat name 111 222 223 333 444 5 ...

  6. 几次面试后才弄懂的HashMap

    本人大四,以前也开发过几个项目,Map相关集合也总用.但是从来没有研究过底层的实现,只知道杂用.结果在最开始的几次面试中一脸懵逼.认识到不足后,浅显的学习了一下,总结成一下几点.(如果写错了还望指正) ...

  7. H3c交换机配置端口镜像详情

    端口镜像 需要将G0/0/1口的全部流量镜像到G0/0/2口,即G0/0/1为源端口,G0/0/2为目的端口. 配置步骤 1.进入配置模式:system-view: 2.创建本地镜像组:mirrori ...

  8. chrome disable-web-security 关闭安全策略 解决跨域

    Chrome 跨域访问线上接口 时间:2016-04-21 作者:zhongxia 前后端分离之后,联调的时候就会出现问题,那就是Ajax跨域问题. 跨域问题的解决方案有很多种比如常规的 后端使用CR ...

  9. nodejs建立websocket通信

    依赖模块 nodejs-websocket 服务端 const ws = require('nodejs-websocket'); console.log('开始建立连接...'); const se ...

  10. python可用ORM之Pony

    Pony是Python的一种ORM,它允许使用生成器表达式来构造查询,通过将生成器表达式的抽象语法树解析成SQL语句.它也有在线ER图编辑器可以帮助你创建Model. 示例分析 Pony语句: sel ...