C语言简单文件操作

一.文件分类

根据数据的组织形式,数据文件可以分为ASCII文件二进制文件

1.二进制文件:数据在内存中是以二进制的形式存储的,如果不加转换地输出到外存上,就是二进制文件,可以认为它就是存储在内存的数据的映像,所以也称之为映像文件(image file)。

2.ASCII文件:如果要求在外存上以ASCII代码形式存储,则需要在存储前进行转换,ASCII文件又称文本文件(text file),每一个字节放一个字符的ASCII代码。

二.文件缓冲区

  在处理数据时,系统自动地在内存区为程序每一个正在使用的文件开辟一个文件缓冲区。从内存向磁盘输入数据,必须先要送到内存中的缓冲区,装满缓冲区后才一起送到磁盘中。如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,充满缓冲区后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。

  通常情况下,缓冲区的刷新(清空)有以下几种情况:

     1.缓冲区满时;

     2.行缓冲区遇到回车时;

     3.关闭文件;

     4.使用特定函数刷新缓冲区。

  在具体的文件编程操作过程中,因为环境的原因经常可能会发生数据写入不进文件中,可能的原因就是缓冲区的数据没有及时的送出。

三.文件类型指针

  缓冲文件系统中,每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件信息(如文件的名字、文件状态、文件当前位置等),这些信息是保存在一个结构体变量中的。该结构体是由系统声明的,取名为FILE,其声明信息包含在头文件"stdio.h"中。

  通常情况下,在操作文件时不通过对变量名的引用来引用文件,而是设置一个指向FILE类型变量的指针变量,然后通过它来引用这些FILE类型变量,这样更方便。

四.打开和关闭文件

1.打开文件

  函数原型:

FILE *fopen( const char * filename, const char * mode );

其中filename为文件名,mode定义了文件的打开方式,具体类型如下:

2.关闭文件:

函数原型:

int fclose( FILE *fp );

代码示例:

#include<stdio.h>
int main()
{
    FILE*tp;
    if((tp=fopen("C:\\Users\\猪英俊\\Desktop\\aaa.txt","w+"))==NULL)
        printf("the file is not exist");
    if(fclose(tp)!=0)
        printf("cannot close the file");
    return 0;
}

以上代码执行后会在指定的绝对路径下创建名称为aaa.txt的文件,如果已经有相同名称的文件存在则打开文件。然后fclose()函数关闭文件,程序结束。

五.文件写入和读取

1.向文件写入和读取字符:

函数原型:

int fputc(char ch,FILE *stream);
int fgetc(FILE *stream);

fputc()把字符ch写到文件指针变量stream所指向的文件中,输出成功,会返回相应的输出字符,输出失败,则返回EOF(即-1)。

fgetc()从stream指向的文件读入一个字符,读成功,会带回所读的字符,失败则返回文件结束标志EOF(即-1)。

代码示例:

#include<stdio.h>
int main()
{
    FILE*tp;
    if((tp=fopen("aaa.txt","r+"))==NULL)
        printf("the file a is not exist");
    char ch=fgetc(tp);
    if(fclose(tp)!=0)
        printf("cannot close the file a");
    if((tp=fopen("bbb.txt","w+"))==NULL)
        printf("the file b is not exist");
    fputc(ch,tp);
    if(fclose(tp)!=0)
        printf("cannot close the file b");
    return 0;
}

上述示例代码会把原先创建好的一个名叫aaa.txt的文件的一个字符复制到名叫bbb.txt的文件中。

2.向文件写入和读取字符串:

函数原型:

int fputs(char *string,FILE *stream);
char *fgets(char *string,int n,FILE *stream);

fputs会将字符指针string所指向的字符串输入到stream文件指针变量所指向的文件中,输出成功返回0,否则返回非0值。

fgets从stream指向的文件读入一个长度为(n-1)的字符串,存放到字符数组string中,读取成功,返回地址str,失败返回NULL。

3. 用格式化方式读写文件

函数原型:

int fprintf(FILE *stream,char *format,variable-list);
int fscanf(FILE *stream,char *format,variable-list);

以上两个函数与printf函数和scanf函数相似,都是格式化读写数据。

示例:

fprintf(tp,"%d,%6.2f",i,f);

其作用是将int型变量i和float型变量f的值按%d和%6.2f的格式输出到tp指向的文件中。若i=3,f=4.5,则输出到文件中的内容是以下字符:3,   4.50

4.用二进制形式向文件读取一段数据

  C语言允许用fread函数从文件中读入一个数据块,用fwrite函数向文件写一个数据块。在读写时是以二进制的形式进行的。在向磁盘写数据时,直接将内存中一组数据原封不动、不加转换地复制到磁盘文件上,在读入时也是将磁盘文件中若干字节的内容一批读入内存。

函数原型:

size_t fwrite(const void*buffer,size_t size,size_t count,FILE*tp);
size_t fread(const void*buffer,size_t size,size_t count,FILE*tp);

其中:

  buffer:是一个指向保存结果地址的指针。

  size:定义读写的字节数。

  count:指定需要读写多少个数据项(每个数据项的长度为size)。

  tp:FILE类型的指针。

代码示例:

(1)写入int型:

#include<stdio.h>
int main()
{
    FILE*tp;
    int buffer[]={1,2,3,4};
    if((tp=fopen("aaa.txt","w+"))==NULL)
        printf("the file is not exist");
    fwrite(buffer,sizeof(int),sizeof(buffer)/sizeof(buffer[0]),tp);
    if(fclose(tp)!=0)
        printf("cannot close the file");
    return 0;
}

(2)读入int型:

#include<stdio.h>
int main()
{
    FILE*tp;
    int buffer[4];
    if((tp=fopen("aaa.txt","r+"))==NULL)
        printf("the file is not exist");
    if(fread(buffer,sizeof(int),4,tp)!=4)
        printf("cannot read from file");
    if(fclose(tp)!=0)
        printf("cannot close the file");
    int i=0;
    for(i=0;i<4;i++)
        printf("%d\n",buffer[i]);
    return 0;
}

结果:

(3)写入结构体:

#include<stdio.h>
#include<string.h>
int main()
{
    FILE*tp;
    int i=0;
    typedef struct{
        int age;
        char name[30];
    }People;
    People per[3];
    per[0].age=12;strcpy(per[0].name,"zou");
    per[1].age=13;strcpy(per[1].name,"wang");
    per[2].age=14;strcpy(per[2].name,"huang");
    if((tp=fopen("aaa.txt","r+"))==NULL)
        printf("the file is not exist");
    for(i=0;i<3;i++)
    {
        if(fwrite(&per[i],sizeof(People),1,tp)!=1)
            printf("cannot write to file");
    }
    if(fclose(tp)!=0)
        printf("cannot close the file");
    return 0;
}

(4)读出结构体:

#include<stdio.h>
#include<string.h>
int main()
{
    FILE*tp;
    int i=0;
    typedef struct{
        int age;
        char name[30];
    }People;
    People per[3];
    if((tp=fopen("aaa.txt","r+"))==NULL)
        printf("the file is not exist");
    for(i=0;i<3;i++)
    {
        if(fread(&per[i],sizeof(People),1,tp)!=1)
            printf("cannot read from file");
    }
    if(fclose(tp)!=0)
        printf("cannot close the file");
    for(i=0;i<3;i++)
    {
        printf("%d\t%s\n",per[i].age,per[i].name);
    }
    return 0;
}

结果:

原文地址:https://www.cnblogs.com/zhuyinjunblog/p/10503129.html

时间: 2024-10-18 07:00:57

C语言简单文件操作的相关文章

C语言之文件操作08——总结

C程序的文件操作共涵盖7个例题,包含格式打印,文件读取,条件查找,矩阵的文件操作,数据格式输入及调用计算等内容. 文件操作使得程序有更强的拓展性,使其可以单独保存数据,这为程序的调试和优化打下了坚实的基础,为我们实现大规模计算提供了可能.至此,相信大家对文件操作也有了比较好的认识,无非是写入.读取.调用. 我们常常会听说C的强大,也是因为她有着文件操作的功能,而文件数据是可以方便重写和维护的. MATLAB数学软件是一款十分强大的工具型软件,它是通过C语言来表达算法的,作为面向过程的编程语言C,

015_C语言中文件操作

 文件:存储在外部介质上的数据集合 ASCII码文件和二进制文件 流式文件和非流式文件 在内存中只有1和0,电脑在显示文件时,按一定编码显示 流式文件:输入输出的数据流的开始和结束仅受程序控制而不受物理符号控制 缓冲文件和非缓冲文件 每一个使用的文件都会在内存中开辟一个缓冲区 文件打开fopen 文件关闭fclose 读到文件末尾时即读到EOF 文件操作所用到的函数fgetc/fputc  fgets/fputs   fscanf/fprintf等一些函数使用时可同过帮助文档得知 文件定位函

android 简单文件操作

1.布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orient

【C】C语言中文件操作相关内容

1. 文件和流的关系 C将每个文件简单地作为顺序字节流.每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件的关系. 在开始执行程序的时候,将自动打开3个文件和相关的流:标准输入流.标准输出流和标准错误.流提供了文件和程序的通信通道.打开一个文件将返回指向FILE结构(在stdio.h中定义)的指针,它包含用于处理文件的信息,也就是说,这个结构包含文件描述符.文件描述符是操作系统数组(打开文件列表的索引).每个数组

C#语言-07.文件操作

a. 文件操作:适用于相对简单的数据保存 i. 读写文件的步骤: 1. 创建文件流 2. 创建读写器 3. 读写文件 4. 关闭读写器 5. 关闭文件流 ii. FileStream(文件流),它主要用于读写文件中的数据,创建一个文件流时,需要指定操作文件的路径,文件的打开方式和文件的访问方式 1. 语法:FileStream 文件对象=new FileStream(String FilePath,FileMode); a. FileMode :打开文件的模式 i. 文件读写器 1. Strea

c语言_文件操作_FILE结构体小解释

参考文档来自:https://www.cnblogs.com/haore147/p/3648395.html 我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作. 在vs2013下的代码如下: #include <stdio.h> #pragma warning(disable:4996) int main() { FILE *p = fopen("C:\\test\\win\\a.txt", "r"); char buf[10

C语言4——文件操作

1.文件操作 int main(){ FILE *p=fopen("D:\\temp\\a.txt","w");//用写的方式打开一个文件 //w的意思是如果文件不存在就建立一个,如果文件存在就覆盖 fputs("hello world",p);//向文件中写入一个字符串 fclose(p);//关闭文件 } int main(void){ char s[1024]={0}; FILE *p=fopen("D:\\temp\\a.txt

一起talk C栗子吧( 第一百四十回:C语言实例--文件操作:基于文件描述符三)

各位看官们,大家好,上一回中咱们说的是基于文件描述符进行文件操作的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中详细地介绍了文件操作相关的系统调用.不过,没有举具体的例子.我们的主要内容就是举例子,因此,今天我们将通过具体的例子来说明如果使用系统调用来操作文件. 对文件的操作,还是使用我总结的文件操作三步曲比较好: fd = open(file_name,flags_read); //打开文件 fd = open(file_name,fl

C语言之文件操作01——打印1000以内的质数到文件

//文件操作 /* ========================================================== 题目:打印1000以内的质数到D盘"质数.txt"下. ========================================================== */ #include<stdio.h> void main() { FILE *fp; int n,i,k,m=0; fp=fopen("D:\\质数.t