C语言文件操作

您所在的位置:网站首页 c语言怎么往文件里写内容 C语言文件操作

C语言文件操作

#C语言文件操作| 来源: 网络整理| 查看: 265

对计算机来说,一切皆数据,超女的信息是数据、C语言源代码文件是数据、编译后的可执行程序也是数据,数据的存放方式有很多种,如内存、文件、数据库等,文件是极其重要的一种。

根据文件中数据组织形式的不同,可以把文件分为文本文件和二进制文件,C语言源代码是文本文件,编译后的可执行程序是二进制文件。

一、文本数据和二进制数据1、文本数据

文本数据由字符串组成,存放了每个字符的 ASCII 码值,每个字符占一个字节,每个字节存放一个字符。

例如数字 123,如果用文本格式存放,数据内容是'1'、'2'、'3' 三个字符,占三个字节,如下表所示。

image.png

1、二进制数据

二进制数据是字节序列,数字123的二进制表示是01111011,如果用二进制格式形式存储,字符、短整型、短整型、长整型都可以存储123,存储方式分别如下:

1)字符型一个字节

01111011

2)短整型2个字节

00000000 01111011

3)整型4个字节

00000000 00000000 00000000 01111011

4)长整型8个字节

00000000 00000000 00000000 00000000 00000000 00000000 00000000 011110113、文本文件和二进制文件

按文本格式存放数据的文件称为文本文件或ASCII文件,文件可以用vi和记事本打开,看到的都是ASCII字符。

按二进制格式存放数据的文件称为二进制文件,如果用vi打开二进制文件,看到的是乱码,没有意义。

二、文件的打开和关闭

C 语言对文件进行操作之前必须先“打开”文件,操作(读和写)完成后,再“关闭”文件。

1、文件指针

操作文件的时候,C语言为文件分配一个信息区,该信息区包含文件描述信息、缓冲区位置、缓冲区大小、文件读写到的位置等基本信息,这些信息用一个结构体来存放(struct _IO_FILE),这个结构体有一个别名FILE(typedef struct _IO_FILE FILE),FILE结构体和对文件操作的库函数在 stdio.h 头文件中声明的。

打开文件的时候,fopen函数中会动态分配一个FILE结构体大小的内存空间,并把FILE结构体内存的地址作为函数的返回值,程序中用FILE结构体指针存放这个地址。

关闭文件的时候,fclose函数除了关闭文件,还会释放FILE结构体占用的内存空间。

FILE结构体指针习惯称为文件指针。

2、打开文件

我们可以使用 C语言提供的库函数fopen来创建一个新的文件或者打开一个已存的文件,调用fopen函数成功后,返回一个文件指针( FILE *),函数的原型如下:

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

参数filename 是字符串,表示需要打开的文件名,可以包含目录名,如果不包含路径就表示程序运行的当前目录。实际开发中,采用文件的全路径。

参数mode也是字符串,表示打开文件的方式(模式),打开方式可以是下列值中的一个。

方式

含 义

说 明

r

只读

文件必须存在,否则打开失败。

w

只写

如果文件存在,则清除原文件内容;如果文件不存在,则新建文件。

a

追加只写

如果文件存在,则打开文件,如果文件不存在,则新建文件。

r+

读写

文件必须存在。在只读 r 的基础上加 '+' 表示增加可写的功能。

w+

读写

在只写w的方式上增加可读的功能。

a+

读写

在追加只写a的方式上增加可读的功能。

英文单词:read简写r、write简写w、append简写a。

注意了,不同教材中对文件打开的方式有不同的说法。

有的说打开文本文件的方式要用"rt"、"wt"、"at"、"rt+"、"wt+"、"at+","t"是text的简写,"t"可以省略不写。

有的说打开二进制文件的方式要用"rb"、"wb"、"ab"、"rb+"、"wb+"、"ab+","b"是binary的简写。

准确的说,在Linux平台下,打开文本文件和二进制文件的方式没有区别。

在windows平台下,如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的"\r\n"转换成"\n";当写入文件的时候,系统会将"\n"转换成"\r\n"写入, 如果以"二进制"方式打开文件,则读和写都不会进行这样的转换,真是罗嗦。

3、关闭文件

fclose库函数用于关闭文件,函数的原型:

int fclose(FILE *fp);

fp为fopen函数返回的文件指针。

示例(book108.c)

/*  * 程序名:book108.c,此程序用于演示文件打开和关闭  * 作者:C语言技术网(www.freecplus.net) 日期:20190525 */ #include    int main() {   FILE *fp=0;     // 定义文件指针变量fp     // 以只读的方式打开文件/root/book.c   if ( (fp=fopen("/root/book.c","r")) == 0 )   {     printf("打开文件/root/book.c失败。\n"); return -1;   }     /* 上代码等同于以下代码   fp=fopen("/root/book.c","r");   if (fp==0)   {     printf("打开文件/root/book.c失败。\n"); return -1;   }   */     // 不信用这个代码来测试   /*   printf("fp=%p\n",(fp=fopen("/root/book.c","r")));   printf("fp=%p\n",fp);   */      // 关闭文件   fclose(fp); }

对初学者来说,以下代码可能难以理解。

 if ( (fp=fopen("/home/wucz/demo/book1.c","r")) == 0 )

其实(fp=fopen("/home/wucz/demo/book1.c","r"))表达式的值就是fp,我在讲if分支语句的时候就讨论过了,估计大家都没把它放在心上,我们可以用代码来测试它。

如果还不理解,就这么抄吧,抄多了就熟了。

4、注意事项

1)调用fopen打开文件的时候,一定要判断返回值,如果文件不存在、或没有权限、或磁盘空间满了,都有可能造成打开文件失败。

2)文件指针是调用fopen的时候,系统动态分配了内存空间,函数返回或程序退出之前,必须用fclose关闭文件指针,释放内存,否则后果严重。

3)如果文件指针是空指针或野指针,用fclose关闭它相当于操作空指针或野指针,后果严重。

三、文本文件的读写

在实际开发中,文本文件以行的形式存放字符串,如C程序的源代码,一段文字等,所以一般是按行写入和读取数据。

1、向文件中写入数据

C语言向文件中写入数据库函数有fputc、fputs、fprintf,在实际开发中,fputc和fputs没什么用,只介绍fprintf就可以了。fprintf函数的声明如下:

int fprintf(FILE *fp, const char *format, ...);

fprintf函数的用法与printf相同,只是多了第一个参数文件指针,表示把数据输出到文件。

程序员不必关心fprintf函数的返回值。

示例(book111.c)

/*  * 程序名:book111.c,此程序用于演示向文件中写入文本数据  * 作者:C语言技术网(www.freecplus.net) 日期:20190525 */ #include    int main() {   int   ii=0;   FILE *fp=0;     // 定义文件指针变量fp     // 以只写的方式打开文件/tmp/test1.txt   if ( (fp=fopen("/tmp/test1.txt","w")) == 0)   {     printf("fopen(/tmp/test1.txt) failed.\n"); return -1;   }     for (ii=0;ii


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3