C语言文件操作总结

 更新时间:2018年03月04日 08:18:51   作者:Andrew_qian  
本篇文章给大家通过代码示例讲述了C语言文件操作的相关知识点,对此有兴趣的朋友可以参考学习下。

关于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 0;
}

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

关于文件操作首先是:

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!"); //文件无法打开 
 }

关于文件打开的模式,我在上一篇文件操作的博客中详细介绍了,链接:https://www.jb51.net/article/135835.htm

在下面就是获取用户输入,使用一个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[80];
 char file_name[15]; //输入文件名称缓冲 
  
 //如果文件和本程序在同一个文件下面,则直接输入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(0); 
 }

/* 
 while( (ch = getc(fp)) != EOF )  //getc函数从文件中读取单个字符 
 {
  putchar(ch);     //循环输出单个字符 
 }
 putchar('\n'); //输出一个换行 
*/ 


 while((fgets(str,80,fp)) != NULL) 
  puts(str);   
  
 fclose(fp);
}

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

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

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

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

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

相关文章

  • C++之异常处理详解

    C++之异常处理详解

    C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决不了,再传给其上一级,由其上一级处理
    2013-08-08
  • C语言实现停车管理系统

    C语言实现停车管理系统

    这篇文章主要为大家详细介绍了C语言实现停车管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++整数常量的前缀和后缀的示例代码

    C++整数常量的前缀和后缀的示例代码

    这篇文章主要介绍了C++整数常量的前缀和后缀,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • VS2017+Qt5+Opencv3.4调用摄像头拍照并存储

    VS2017+Qt5+Opencv3.4调用摄像头拍照并存储

    本文主要介绍了VS2017+Qt5+Opencv3.4调用摄像头拍照并存储,实现了视频,拍照,保存这三个功能。具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 解析C/C++ Capstone 引擎源码编译问题

    解析C/C++ Capstone 引擎源码编译问题

    Capstone的编译非常简单只需要一步即可轻松得到对应的Lib库文件,如下将介绍该引擎如何被编译,以及简单的测试编译,这篇文章主要介绍了C/C++ Capstone 引擎源码编译,需要的朋友可以参考下
    2022-09-09
  • C++深入详解单例模式与特殊类设计的实现

    C++深入详解单例模式与特殊类设计的实现

    这篇文章主要为大家详细介绍了C++单例模式和特殊类的设计,单例模式这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-06-06
  • 迷宫游戏控制台版C++代码

    迷宫游戏控制台版C++代码

    这篇文章主要为大家详细介绍了迷宫游戏控制台版C++代码,可以调整大小的迷宫游戏,给定迷宫的入口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • c++中queue用法超详细讲解(入门必看!)

    c++中queue用法超详细讲解(入门必看!)

    queue是一种容器转换器模板,调用#include< queue>即可使用队列类,下面这篇文章主要给大家介绍了关于c++中queue用法超详细讲解的相关资料,需要的朋友可以参考下
    2022-10-10
  • C语言版学生信息管理系统

    C语言版学生信息管理系统

    这篇文章主要为大家详细介绍了C语言版学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C++控制结构详情

    C++控制结构详情

    这篇文章主要介绍了C++控制结构详情,C++的控制结构和其它编程语言类似包括顺序结构、选择结构、循环结构,更多相关资料需要的小伙伴可以参考下面文章内容
    2022-03-03

最新评论