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

关于文件打开的模式,我在上一篇文件操作的博客中详细介绍了,链接: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[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个字节后是否到达文件末尾。

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

原文地址:https://www.cnblogs.com/qsyll0916/p/8503552.html

时间: 2024-10-09 19:04:44

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

C语言文件操作函数的编写

 编写文件操作的头文件 /************************************************************************** Copyright(C)    :2014-08-5 toto Filename       :file.h Author          :涂作权 Version         :V1.1 Date            :2014-08-05 Description     :文件操作的头文件 Others  

C 语言文件操作

1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不能随机存取:也意味着是一段连续的内容,每块数据之间的顺序是确定的.比如一个很大的文件,不能一次性加载到内存里面,无法直接获取文件任意位置的内容,只能逐渐加载到内存.     比如 TCP 被抽象为 stream 而 UDP 被抽象为 block.     2. 缓冲区:     fopen 时, 磁盘 --> 缓冲区

c语言文件操作函数

c语言文件操作函数大全 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. w 打开只写文件,若文件存在则文件长度清为0,即该文件

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

go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 文件操作 func Open(name string) (file *File, err error),*File 是实现了 io.Reader这个接口byte[] 转化为 bytes.Buffer:bytes.NewBuffer([]byte). 一.建立与打开 建立文件函数:func Create(name string) (file *File, err Error)func N

C语言文件操作(一)

实例1:读写字符文件,每次读取一个字符. #include<stdio.h> #include <stdlib.h> int main() { FILE *fpin ; FILE *fpout; char c; fpout=fopen("c:\\dest.txt","wt"); if((fpin=fopen("c:\\test.txt","rt"))!=NULL) { c = fgetc(fpin);

C语言文件操作(二)

实例2:读取字符文件,每次读入一个缓存里面. #include<stdio.h> #include <stdlib.h> #define MAXLEN 1024 int main() { FILE *fin; FILE *fout=fopen("c:\\dest.txt","wt"); char buf[MAXLEN]; if((fin=fopen("c:\\test.txt","rt"))!=NULL

C语言文件操作(三)

实例3:读写字节文件,每次读入一个缓存里面. #include<stdio.h> #include <stdlib.h> #define MAXLEN 1024 int main() { FILE *fpin ; FILE *fpout; unsigned char buf[MAXLEN]; int c; fpout=fopen("c:\\dest.jpg","wb"); if((fpin=fopen("c:\\test.jpg&q

C语言文件操作(四)

实例四:随机读写.在C:\\TEST.TXT 文件中创建如下字符串:我爱你,中国 使用随机读写,输出"中国"两个字,以为中文字符占两个字节,所以要从文件首部向后偏移7个字节,逗号是英文字符,占用一个字节. #include<stdio.h> #include <stdlib.h> int main() { FILE *fp ; char c; if((fp=fopen("c:\\test.txt","rb"))!=NULL

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

C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下 fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态.mode有下列几种形态字符串:r 打开只读文件,

C语言 文件操作API介绍

文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来.从不同的角度可对文件作不同的分类.从用户的角度看,文件可分为普通文件和设备文件两种. 普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件.目标文件.可执行程序:也可以是一组待输入处理的原始数据,或者是一组输出的结果.