C语言文件读写
- 格式:doc
- 大小:75.00 KB
- 文档页数:14
文件使用方式1.文件使用方式“rt” 只读打开一个文本文件,只允许读数据“wt” 只写打开或建立一个文本文件,只允许写数据“at” 追加打开一个文本文件,并在文件末尾写数据“rb” 只读打开一个二进制文件,只允许读数据“wb” 只写打开或建立一个二进制文件,只允许写数据“ab” 追加打开一个二进制文件,并在文件末尾写数据“rt+” 读写打开一个文本文件,允许读和写“wt+” 读写打开或建立一个文本文件,允许读写“at+” 读写打开一个文本文件,允许读,或在文件末追加数据“rb+” 读写打开一个二进制文件,允许读和写“wb+” 读写打开或建立一个二进制文件,允许读和写“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据注意:对于文本文件的操作,我们可以“r”,“w”,“a”,“a+”不需要加字母t也可以的2.以打开文本文件的操作来说明如果我们所要创建的文件已经存在,不同的方式会有不同的效果:A: 用fopen("file.txt","a+")a+ 以附加方式打开可读写的文件。
若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
B:用fopen(”test.txt”,”w+”)//test.txt为你要打开的文件名,“w+”表示假如文件不存在则会创建,假如文件存在则会替代3.下面详细总结下:字符串含义"r" 以只读方式打开文本文件"w" 以只写方式打开文本文件,已存在的将被覆盖"a" 以只写方式打开文本,指针指向文件尾,原文件保留"+" 与上面的字符串组合,表以读写方式打开(还有这个)"b" 与上面的字符串组合,表打开二进制文件说明:纯属个人整理,如有雷同,纯属巧合,希望对大家有所帮助哈!!!。
Linux下C语言的文件(fputc,fgetc,fwrite,fread对文件读写操作)//==================================fputc 向文件写入字符#include <stdio.h>#include <stdlib.h>main(){FILE *fp;char ch;if((fp=fopen("test.txt","w"))==NULL){printf("不能打开文件\n");exit(0);}while ((ch=getchar())!='\n')fputc( ch, fp );fclose(fp);}-------------小提示:fp=fopen("test.txt","w") ,把"w"改为"a" 可以创建文件并且追加写入内容exit(0); 需要包含stdlib.h 头文件,才能使用//============================================================fgetc 读取字符#include <stdio.h>#include <stdlib.h>main( int argc, char *argv[] ){char ch;FILE *fp;int i;if((fp=fopen(argv[1],"r"))==NULL){printf("不能打开文件\n");exit(0);}while ((ch=fgetc(fp))!=EOF)putchar(ch);fclose(fp);}文件结尾,通过判断EOF//============================================================== fwrite 的使用使数组或结构体等类型可以进行一次性读写#include <stdio.h>#include <stdlib.h>main(){FILE *fp1;int i;struct student{char name[10];int age;float score[2];char addr[15];}stu;if((fp1=fopen("test.txt","wb"))==NULL){printf("不能打开文件");exit(0);}printf("请输入信息,姓名年龄分数1 分数2 地址:\n");for( i=0;i<2;i++){scanf("%s %d %f %f %s",,&stu.age,&stu.score[0],&stu.score[1], stu.addr);fwrite(&stu,sizeof(stu),1,fp1);}fclose(fp1);}//=============================================================== fread 的使用#include <stdio.h>#include <stdlib.h>main(){FILE *fp1;int i;struct student{char name[10];int age;float score[2];char addr[15];}stu;if((fp1=fopen("test.txt","rb"))==NULL){printf("不能打开文件");exit(0);}printf("读取文件的内容如下:\n");for (i=0;i<2;i++){fread(&stu,sizeof(stu),1,fp1);printf("%s %d %7.2f %7.2f %s\n",,stu.age,stu.score[0],stu.score[1],stu.addr);}fclose(fp1);}。
C语⾔读写⽂件两种⽅式ASCII和⼆进制。
C语⾔读写⽂件有两种⽅式ASCII 和⼆进制。
现在举例说明:内存中的字符或字符串都是⽂本模式(unicode编码存储,统⼀长度,定长码,⽅便)内存中的其他变量都是以⼆进制编码存储程序的代码以⽂本模式ASCII码⽅式存储1.在windows系统中,⽂本模式下,⽂件以" \r\n"代表换⾏。
若以⽂本模式打开⽂件,并⽤fputs等函数写⼊换⾏符"\n"时,函数会⾃动在"\n"前⾯加上"\r"。
即实际写⼊⽂件的是"\r\n" 。
读取的时候⾃动去掉\r,将\n写⼊内存。
2.在类Unix/Linux系统中⽂本模式下,⽂件以"\n"代表换⾏。
所以Linux系统中在⽂本模式和⼆进制模式下并⽆区别。
注:Windows 采⽤ \r\n 是有原因的,Windows 采⽤了传统的英⽂打字机的模式。
想想看英⽂打字机是如何换⾏的呢?英⽂打字机是选择将⼩车退回⾄起点,这个过程称为回车(carriage return, CR),随后把⼩车调⾄下⼀⾏的位置,这个过程称为换⾏(line feed, LF),这样就完成了英⽂打字机中换⾏过程。
回车(CR)在计算机中使⽤ ASCII 为 13 的字符来表⽰,换⾏(LF)使⽤ASCII 为 10 的字符来表⽰。
这也就是 Windows 的换⾏采⽤ \r\n 来表⽰的原因。
3.当⽤⼆进制模式读取windows下代表换⾏的\r\n时,不能⾃动去掉\r,这样读⼊内存的数据多了⼀个‘\r’,造成跟在‘\r’后⾯的⼆进制位右移,读取必然会出错!4.如果在⽂件中读到0x1B,⽂本模式会认为这是⽂件结束符,也就是⼆进制模型不会对⽂件进⾏处理,⽽⽂本⽅式会按⼀定的⽅式对数据作相应的转换。
5.⽤⽂本模式写⽂件,读取时也要⽤⽂本模式,⼆进制模式同样。
c语言中文本文件操作的主要函数在C语言中,文本文件操作是我们必须了解的一个重要方面。
我们经常需要读取或写入文本文件来存储或读取数据,因此掌握文本文件操作函数非常重要。
下面是C语言中常用的文本文件操作函数:1. fopen()fopen()函数用于打开一个文件并返回一个指向该文件的文件指针。
它需要两个参数:文件名和打开模式。
打开模式可以是读、写或追加等模式。
例如,打开文件进行读取操作的模式为“r”,写入操作的模式为“w”,追加操作的模式为“a”。
2. fclose()fclose()函数用于关闭打开的文件。
它需要一个参数:指向文件的文件指针。
关闭文件时必须使用fclose()函数,否则会导致内存泄漏和数据损坏。
3. fgetc()和fgets()fgetc()函数用于从打开的文件中读取一个字符,fgets()函数用于从打开的文件中读取一行文本。
它们的参数都是文件指针和一个字符数组,确定要读取的最大字符数。
例如,fgets(fp, 100, file)将从文件指针fp指向的文件中读取最多100个字符。
4. fputc()和fputs()fputc()函数用于向文件中写入一个字符,fputs()函数用于向文件中写入一行文本。
它们的参数都是一个字符或一个字符串,和文件指针,它们将字符或字符串写入文件中。
5. fprintf()和fscanf()fprintf()函数用于将数据格式化后写入文件中,fscanf()函数用于从文件中读取已格式化的数据。
格式化字符串由控制字符和占位符组成,告诉函数要格式化的数据类型和如何输出。
例如,fprintf(fp, "%d", num)将整数num以字符形式写入fp指向的文件。
6. fseek()fseek()函数用于将文件指针定位到文件中任何指定的位置。
它需要三个参数:文件指针,距离文件开始位置的偏移量和定位方式(开始、当前或结尾)。
例如,fseek(file, 5, SEEK_SET)将把文件指针设置到文件的第6个位置。
C语言实现二进制文件读写(转载)文件的读写是挺基础,为了备忘也为了之后查资料方便,从网上找了这个例子,觉得写的很好,就转载过来了。
先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。
二进制读写的顺序是用fopen 以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。
下面我们看看一个拷贝程序的源码:Copy.c:#include <stdio.h>#include <stdlib.h>#define MAXLEN 1024int main(intargc, char *argv[]){if(argc< 3 ){printf("usage: %s %s\n", argv[0], "infileoutfile");exit(1);}FILE * outfile, *infile;outfile = fopen(argv[2], "wb" );infile = fopen(argv[1], "rb");unsigned char buf[MAXLEN];if(outfile == NULL || infile == NULL ){printf("%s, %s",argv[1],"not exit\n");exit(1);}intrc;while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,infile)) != 0 ) {fwrite(buf, sizeof( unsigned char ), rc, outfile );}fclose(infile);fclose(outfile);system("PAUSE");return 0;}现在来讲讲这个程序,这个程序的作用就是将文件1的内容直接拷贝到文件2中,注意fread 的返回值,这个值需要在fwrite的时候将会用到。
c语言的各种读写模式C语言的各种读写模式一、以只读模式打开文件在C语言中,可以通过以只读模式打开文件来读取文件的内容。
只读模式不允许对文件进行写操作,可以保证文件的内容不会被意外修改。
使用只读模式打开文件的代码如下:```cFILE *file = fopen("file.txt", "r");if (file == NULL) {printf("无法打开文件\n");return 1;}// 读取文件内容的代码fclose(file);```在上述代码中,使用`fopen`函数以只读模式打开名为`file.txt`的文件。
如果文件打开失败,即文件不存在或无法访问,则会输出错误信息并返回。
如果文件成功打开,则可以在之后的代码中读取文件的内容。
二、以写入模式打开文件与只读模式相反,以写入模式打开文件允许对文件进行写操作。
使用写入模式打开文件时,如果文件不存在,则会创建一个新的文件;如果文件已存在,则会清空文件内容。
使用写入模式打开文件的代码如下:```cFILE *file = fopen("file.txt", "w");if (file == NULL) {printf("无法打开文件\n");return 1;}// 写入文件内容的代码fclose(file);```在上述代码中,使用`fopen`函数以写入模式打开名为`file.txt`的文件。
如果文件打开失败,则会输出错误信息并返回。
如果文件成功打开,则可以在之后的代码中写入文件的内容。
三、以追加模式打开文件追加模式是一种特殊的写入模式,它不会清空文件内容,而是在文件末尾继续写入新的内容。
使用追加模式打开文件的代码如下:```cFILE *file = fopen("file.txt", "a");if (file == NULL) {printf("无法打开文件\n");return 1;}// 写入文件内容的代码fclose(file);```在上述代码中,使用`fopen`函数以追加模式打开名为`file.txt`的文件。
C语言是一种广泛应用的编程语言,其功能强大灵活性高,因此在处理文件操作时也是非常方便的。
在C语言中,要读取文件中的每一行并存放在数组中,有几种不同的方法可以实现。
下面将介绍一种比较常用的方法,以帮助读者在实际应用中获取文件中的每一行数据。
1. 使用fgets函数逐行读取文件在C语言中,可以使用fgets函数逐行读取文件。
该函数的原型如下:```cchar *fgets(char *str, int n, FILE *stream);```其中,str表示存储读取数据的缓冲区,n表示最大读取字符数,stream表示要读取的文件指针。
下面是一个示例代码:```c#include <stdio.h>#include <stdlib.h>int m本人n() {FILE *fp;char line[100];char *array[100]; // 假设最多存放100行数据int i = 0;fp = fopen("data.txt", "r");if (fp == NULL) {printf("文件打开失败\n");exit(1);}while (fgets(line, 100, fp) != NULL) {array[i] = (char *)malloc(sizeof(char) * 100); // 分配内存空间 strcpy(array[i], line);i++;}fclose(fp);for (int j = 0; j < i; j++) {printf("s", array[j]); // 输出数组中的每一行数据}for (int j = 0; j < i; j++) {free(array[j]); // 释放内存}return 0;}```在上面的示例代码中,我们首先使用fgets函数逐行读取文件中的数据,并将每一行数据存放在数组array中。
c语言,文件读写的流程C语言中,文件读写是指对磁盘文件的读取和写入操作,通过文件读写,可以实现数据的持久存储和传输。
文件读写通常涉及到打开文件、读取文件内容、修改文件内容、关闭文件等一系列操作。
下面是文件读写的一般流程:1. 引入头文件:文件读写需要引入头文件stdio.h,该头文件包含文件读写所需的函数和宏定义。
2. 打开文件:在C语言中,打开文件需要使用函数fopen()。
函数原型为:FILE *fopen(const char *filename, const char *mode)。
参数filename是包含文件路径和文件名的字符串,参数mode是文件打开的模式,包括读取模式("r")、写入模式("w")和追加模式("a")等。
3. 检查文件打开是否成功:打开文件后,需要检查文件是否成功打开。
如果文件打开失败,可以使用函数perror()打印出相应的错误信息。
例如:```cFILE *fp;if ((fp = fopen("example.txt", "r")) == NULL) {perror("Failed to open file");return 1;}```4. 读取文件内容:打开文件后,可以使用函数fgetc()、fgets()或fread()等来读取文件内容。
函数fgetc()读取一个字符,函数fgets()读取一行字符串,函数fread()可用于读取任意长度的数据块。
5. 修改文件内容:可以使用函数fputc()、fputs()或fwrite()等函数来修改文件内容。
函数fputc()将一个字符写入文件,函数fputs()将一个字符串写入文件,函数fwrite()可用于写入任意长度的数据块。
6. 关闭文件:在文件读写完成后,需要使用函数fclose()来关闭文件。
c语言pta编写函数,从给定的输入文本文件中按行读入,并按行写入给定的输出文件中。
下面是一个简单的C语言程序,该程序可以从输入文件中按行读取文本内容,并将其按行写入到输出文件中。
请注意,这里使用了标准C库中的`fopen`、`fgets`和`fputs`等函数来实现文件的读写操作。
```c#include <stdio.h>#include <stdlib.h>// 函数声明void copyFile(const char *inputFileName, const char *outputFileName);int main() {const char *inputFileName = "input.txt"; // 输入文件名const char *outputFileName = "output.txt"; // 输出文件名// 调用函数进行文件拷贝copyFile(inputFileName, outputFileName);printf("File copy successful.\n");return 0;}// 函数定义:按行拷贝文件内容void copyFile(const char *inputFileName, const char *outputFileName) {// 打开输入文件FILE *inputFile = fopen(inputFileName, "r");if (inputFile == NULL) {perror("Error opening input file");exit(EXIT_FAILURE);}// 打开输出文件FILE *outputFile = fopen(outputFileName, "w");if (outputFile == NULL) {perror("Error opening output file");fclose(inputFile);exit(EXIT_FAILURE);}// 逐行读取输入文件内容,并写入输出文件char buffer[1024];while (fgets(buffer, sizeof(buffer), inputFile) != NULL) {fputs(buffer, outputFile);}// 关闭文件fclose(inputFile);fclose(outputFile);}```这个简单的程序定义了一个`copyFile`函数,该函数接受两个参数:输入文件名和输出文件名。
c语言文件读写从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。
ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。
ASCII码文件可在屏幕上按字符显示。
二进制文件是按二进制的编码方式来存放文件的。
二进制文件虽然也可在屏幕上显示,但其内容无法读懂。
C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。
输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。
因此也把这种文件称作“流式文件”。
1、文件的打开与关闭文件在进行读写操作之前要先打开,使用完毕要关闭。
所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。
关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。
在C语言中,文件操作都是由库函数来完成的。
在本章内将介绍主要的文件操作函数。
在stdio.h文件中,有结构体类型FILE。
typeof struct{ short level; /*缓冲区“满”或“空”的程度*/unsigned flags; /*文件状态标志*/char fd; /*文件描述符*/unsigned char hold; /*如无缓冲区不读取字符*/short bsize; /*缓冲区的大小*/unsigned char *buffer; /*数据缓冲区的位置*/unsigned ar *curp; /*指针、当前的指向*/unsigned istemp; /*临时文件、指示器*/short token; /*用于有效性检查*/} FILE;可以定义文件类型数组,例如:FILE f[5];可以定义文件类型指针,例如:FILE *fp;——fp指向某一个文件的结构体变量。
如果有n个文件,一般应设n个指针变量,使它们分别指向n个文件,以实现对文件的访问。
1.1 文件的打开(fopen函数)fopen()函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);其中,“文件指针名”必须是被说明为FILE 类型的指针变量;“文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求;“文件名”是字符串常量或字符串数组。
C语言读写文件操作C语言中提供了丰富的文件读写操作函数,可以用来打开、创建、读取、写入、关闭文件。
下面将介绍这些函数的使用方法。
1.打开文件在C语言中,我们可以使用`fopen`函数来打开一个文件。
该函数的原型如下:```cFILE *fopen(const char *filename, const char *mode);```其中,`filename`是要打开的文件名,`mode`是打开文件的模式。
常见的文件打开模式有以下几种:-`"r"`:只读模式,打开文件用于读取数据。
-`"w"`:写入模式,若文件存在,则清空文件内容;若文件不存在,则创建文件。
-`"a"`:追加模式,若文件存在,则在文件末尾追加内容;若文件不存在,则创建文件。
-`"r+"`:读写模式,打开一个已存在的文件,可以读取、写入文件内容。
-`"w+"`:读写模式,若文件存在,则清空文件内容;若文件不存在,则创建文件。
-`"a+"`:读写模式,若文件存在,则在文件末尾追加内容;若文件不存在,则创建文件。
打开文件成功后,`fopen`函数返回一个类型为`FILE*`的指针,用于后续的文件读写操作。
示例代码:```cFILE *fp = fopen("file.txt", "r");if (fp == NULL)printf("打开文件失败\n");return -1;```2.关闭文件在文件读写操作完成后,我们需要使用`fclose`函数来关闭文件,释放资源。
该函数的原型如下:```cint fclose(FILE *stream);```其中,`stream`是要关闭的文件指针。
示例代码:```cint result = fclose(fp);if (result == 0)printf("关闭文件成功\n");} elseprintf("关闭文件失败\n");```3.读取文件内容C语言中提供了多个函数用于从文件中读取数据,常用的函数有:- `fgetc`:从文件中读取一个字符。
C语⾔中以⽂本⽅式读写⽂件时换⾏符转换的注意事项我们知道在UNIX下是没有回车符(\r)的,只有换⾏符(\n),⽽C语⾔诞⽣于UNIX(Linux即⾯向开源的UNIX,Mac OS也是UNIX发展⽽来的,⽽Windows是从MS-DOS发展⽽来,与前两者不同),所以C语⾔的源代码⽂件中也是以 \n 表⽰换⾏。
所以总结⼀下:Windows下换⾏采⽤ \r\n 表⽰,全称回车换⾏符。
UNIX(Linux)下换⾏采⽤ \n 表⽰,即换⾏符。
Mac OS下换⾏采⽤ \r 表⽰,即回车符。
所以,当C语⾔在Windows下以⽂本⽅式读取⽂件就会出现⼀个转换,看如下代码:FILE * f1;f1 = fopen("utf8.txt", "r");/*"utf8.txt"⽂件的⼗六进制结构如下:41 42 43 0D 0A 44 44 4B*/fseek(f1, 3, SEEK_SET);printf("%x\n", getc(f1));printf("%x\n", getc(f1));fclose(f1);输出结果:a44Press any key to continue解释:当我们把⽂件指针通过fseek函数移到位置 3 时,⽂件指针指向了回车符(0x0D),然后我们⽤getc函数读取当前⽂件指针所指的字节时,C语⾔会把Windows下表⽰换⾏的0x0D和0x0A两个字节看成UNIX下表⽰换⾏的0x0A⼀个字节,所以,此时getc函数返回的是0x0A 这个值。
故,这次的getc函数读完后⽂件指针向后偏移两个字节,导致了下⼀个的getc返回的是0x44。
同理,当C语⾔在Windows下⼯作时,⽤putc向⽂件输⼊ \n 时会被⾃动转成 \r\n,如下代码:FILE * f1;f1 = fopen("new.txt", "w");putc('\n', f1);fclose(f1);"new.txt"⽂件的⼗六进制结构:0D 0A解释:上述代码会在当前⽬录创建⼀个新⽂件"new.txt",并以⽂本⽅式只写模式打开⽂件流,然后通过putc向该⽂件输⼊字符 \n,这时C语⾔会⾃动把 \n 转为 \r\n,原理同上。
关于流文件/文本文档的操作由于工作需要,最近学习了如何使用C语言对文本.txt进行读写操作。
程序已经编写完成,符合大体需求。
现在在这里对整体的使用方法进行阐述。
在对文本文档进行操作时,要使用到很多库函数,因此首先需要包含它,增加标准头文件stdio.h●文本文档的打开和关闭.在对文本文档操作时,需要建立一个FILE型变量,即FILE *fp。
(1)使用原形函数FILE * fopen(const char *filename,const char *mode);尽心该文本打开。
比如要打开C盘下的as.txt文档,则fp = fopen(“C:\\as.txt”,”r”);表示以只读的方式打开该文档。
Mode有以下几种:fopen函数调用如下:fopen(“文件名”,“使用文件方式”);只要有’+’,则表示既可读又可写,需要注意缓存区的存在,要注意文件的同步。
r:只读;w:只写;r+:允许读写;w+:允许读写;a:向文本文件末添加数据;a+:向文本文件末添加数据,允许读;rb:只读二进制文件;wb:只写二进制文件;rb+:只读二进制文件,允许写;wb+:只写二进制文件,允许读;ab:向二进制文件末添加数据;ab+:向二进制文件末添加数据,允许读;在使用fopen之后,会返回一个值,为FILE类型指针,已经与指定文件相关联。
如果该返回值为NULL,则表示打开文件失败,失败原因可能是没有空闲流,或该文件不存在,或执行环境禁止打开这个文件。
(2)使用fclose(FILE *filename)来对打开的文本进行关闭。
Fclose(fp),如果关闭成功,则返回0;否则返回EOF,EOF在标准头文件stdio.h中定义。
在调用fclose时,会自动同步流文件。
●读文件和写文件,又叫做读流和写流。
(1)读流使用fread函数来实现,1、其原型函数如下:size_t fread(void *ptr,size_t size,size_t nmenm,FILE *stream);表示从指定流(stream,又叫做文件指针)读取最多nmemb个元素到指定位置ptr,每个元素的大小由size决定。
C语言读写文件操作C语言提供了一系列功能强大的文件读写操作函数,使得我们能够方便地读取和写入文件。
本文将详细介绍C语言中的文件读写操作,并给出一些实例。
1.文件指针在C语言中,我们需要使用文件指针来操作文件。
文件指针是一个指向FILE结构体的指针,该结构体定义了文件相关的信息。
我们可以使用以下语句来声明一个文件指针:```cFILE *fp;```2.打开文件在读写文件之前,我们需要先打开文件。
打开文件的函数是```fopen```,它的原型如下:```cFILE *fopen(const char *filename, const char *mode);```其中,```filename``` 是文件名,可以是绝对路径或相对路径;```mode``` 是打开文件的模式,可以是以下几种之一:-"r":只读模式,打开一个已存在的文件,如果文件不存在,则打开失败。
-"w":写入模式,打开一个文件进行写操作,如果文件存在,则清空文件内容。
如果文件不存在,则创建一个新文件。
-"a":追加模式,打开一个文件进行写操作,如果文件存在,则在文件末尾追加内容。
如果文件不存在,则创建一个新文件。
-"r+":读写模式,打开一个已存在的文件进行读写操作。
-"w+":读写模式,打开一个文件进行读写操作,如果文件存在,则清空文件内容。
如果文件不存在,则创建一个新文件。
-"a+":读写模式,打开一个文件进行读写操作,如果文件存在,则在文件末尾追加内容。
如果文件不存在,则创建一个新文件。
以下是一个打开文件的例子:```cFILE *fp;fp = fopen("example.txt", "r");```3.读取文件内容在打开文件之后,我们可以使用```fscanf```函数来读取文件内容。
C语言基础教程文件和文件指针1.文件一般说来,文件是有序数据的集合。
程序文件是程序代码的有序集合,数据文件是一组数据的有序集合。
文件是被存放在外部存储设备中的信息。
对文件的处理过程就是面向文件的输入和输出过程。
文件的输入过程是从文件中读出信息,文件的输出过程是往文件中写入信息,文件的输入的过程使用读函数,实现文件输出的过程使用写函数。
文件的读写函数是实现文件操作的主要函数,本章将用大量篇幅来讲述文件的读写函数。
C语言文件被称为流式文件,其特点是不分记录或块,将文件看成是信息"流"或看成是一个字符流(文本文件),或看成是一个二进制流(二进制文件).文件的存取是以字符(字节)为单位的,读写数据流的开始和结束受程序控制。
任何一个文件都是以EOF结束,最简单的文件是只有结束符的空文件。
C语言文件包含有设备文件和磁盘文件,例如,键盘是一种输入信息的文件,显示器屏幕和打印机是输出信息的文件它们都属于设备文件。
将内存的信息放到磁盘上保存,需要时再从磁盘上装入内存,这就要使用磁盘文件,磁盘文件是计算机中常用的文件nC语言文件按存放设备分设备文件和磁盘文件;按数据的组织形式分为文本文件(ASCII码文件)和二进制文件。
文本文件是按一个字节存放一个字符的ASCII码来存放的;二进制文件是按数据在内存中的存储形式放到磁盘上的。
例如,有一个整数10000,在内存中按二进制形式存放,占2个字节,将它放在磁盘上如按文本文件形式存放,占5个字节,每个数位占一个字节。
两种存放方式各有利弊。
以文本文件形式输出便于对字符进行处理,也便于输出字符,但是占用存储空间较多,并且要花费转换时间。
以二进制文件形式输出可节省存储空间和转换时间,但是不能直接输出字符形式。
2.文件指针文件指针是一种用来指向某个文件的指针。
如果说某个文件指针指向某个文件,则是该文件指针指向某个文件存放在内存中的缓冲区的首地址。
每一个被使用的文件都要在内存中开辟一个区域,用来存放的有关信息,包括文件名字、文件状态和文件当前位置等。
C语言文件读写(基于缓冲技术)Syd168 2011.10.1当文件按指定的工作方式打开以后,就可以执行对文件的读和写。
下面按文件的性质分类进行操作。
针对文本文件和二进制文件的不同性质,对文本文件来说,可按字符读写或按字符串读写;对二进制文件来说,可进行成块的读写或格式化的读写。
0. 文件打开与关闭1. 读写字符C提供fgetc和fputc函数对文本文件进行字符的读写,其函数的原型存于stdio.h头文件中,格式为:⏹int fgetc(FILE *stream)fgetc( )函数从输入流的当前位置返回一个字符,并将文件指针指示器移到下一个字符处,如果已到文件尾,函数返回EOF,此时表示本次操作结束,若读写文件完成,则应关闭文件。
⏹int fputc(int ch,FILE *stream)fputc()函数完成将字符c h的值写入所指定的流文件的当前位置处,并将文件指针后移一位。
fputc()函数的返回值是所写入字符的值,出错时返回EOF。
[例] 将存放于磁盘的指定文本文件按读写字符方式逐个地从文件读出,然后再将其显示到屏幕上。
采用带参数的main( ),指定的磁盘文件名由命令行方式通过键盘给定。
参数argc是用于记录输入参数的个数,argv是指针数组,用于存放输入参数的字符串,串的个数由argc描述。
假设我们指定读取的文件名为L8-2.c,并且列表文件内容就是源程序。
经过编译和连接生成可执行的文件L8-2.exe。
运行程序l8-2.exe,输入的命令行方式为:c:\tc>l8-2 L8-2.c上述程序以命令行方式运行,其输入参数字符串有两个,即argv[0]="c:\tc>l8-2"、argv[1]=" L8-2.c ",argc = 2。
故打开的文件是L8-2.c 。
程序中对fgetc( )函数的返回值不断进行测试,若读到文件尾部或读文件出错,都将返回C的整型常量EOF,其值为非零有效整数。
程序的运行输出为源程序本身:c:\tc>l8-2 L8-2.c文件test.txt,文件以文本只写方式打开,所以流文件具有可读性,能支持各种字符处理工具访问。
简单地说,我们可以通过DOS提供的type命令来列表显示文件内容。
运行程序:I love china!在DOS操作系统环境下,利用type 命令显示test.txt文件如下:c:\tc> type test.txtI love china!2.读写字符串C提供读写字符串的函数原型在stdio.h头文件中,其函数形式为:⏹char *fgets(char *str,int num,FILE *stream)fgets() 函数从流文件stream中读取至多num-1个字符,并把它们放入str指向的字符数组中。
读取字符直到遇见回车符或EOF (文件结束符)为止,或读入了所限定的字符数。
⏹int fputs(char *str,FILE *stream)fputs( )函数将str指向的字符串写入流文件。
操作成功时,函数返回0值,失败返回非零值。
[例] 向磁盘写入字符串,并写入文本文件test.txt:写入文件。
如串长为0,即空串。
程序结束。
输入:Hello!How do you doGood-bye!运行结束后,我们利用dos的type命令列表文件:c:\tc>type test.txtHello!How do you doGood-bye!这里所输入的空串,实际为一单独的回车符,其原因是gets 函数判断串的结束是以回车作标志的。
[例] 从一个文本文件test1.txt中读出字符串,再写入令一个文件test2.txt。
作文件以前,应将两个文件以需要的工作方式同时打开(不分先后),读写完成后,再关闭文件。
设计过程是按写入文件的同时显示在屏幕上,故程序运行结束后,应看到增加了与原文件相同的文本文件并显示文件内容在屏幕上。
3. 格式化的读写前面的程序设计中,我们介绍过利用scanf( )和printf( )函数从键盘格式化输入及在显示器上进行格式化输出。
对文件的格式化读写就是在上述函数的前面加一个字母f成为fscanf( )和fprintf( )。
其函数调用方式:⏹int fscanf(FILE *stream,char *format,arg_list)⏹int fprintf(FILE *stream,char *format,arg_list)其中,stream为流文件指针,其余两个参数与scanf( )和printf( )用法完全相同。
[例] 将一些格式化的数据写入文本文件,再从该文件中以格式化方法读出显示到屏幕上,其格式化数据是两个学生记录,包括姓名、学号、两科成绩。
件,写入和读出格式化数据,有一点很重要,那就是用什么格式写入文件,就一定用什么格式从文件读,否则,读出的数据与格式控制符不一致,就造成数据出错。
上述程序运行如下:input data:xiaowan j001 87.5 98.4xiaoli j002 99.5 89.6output from filexiaowan j001 87.50 98.40xiaoli j002 99.50 89.60列表文件的内容显示为:c:\>type test.txtxiaowan j001 87.50 98.40xiaoli j002 99.50 89.60此程序所访问的文件也可以定为二进制文件,若打开文件的方式为:if ((fp=fopen("test1.txt","wb"))==NULL){ / * 以二进制只写方式打开文件* /printf("cannot open file");exit(0);}其效果完全相同。
4. 成块读写前面介绍的几种读写文件的方法,对其复杂的数据类型无法以整体形式向文件写入或从文件读出。
C语言提供成块的读写方式来操作文件,使其数组或结构体等类型可以进行一次性读写。
成块读写文件函数的调用形式为:⏹int fread(void *buf,int size,int count,FILE *stream)⏹int fwrite(void *buf,int size,int count,FILE *stream)fread()函数从stream 指向的流文件读取count (字段数)个字段,每个字段为size(字段长度)个字符长,并把它们放到b u f(缓冲区)指向的字符数组中。
fread()函数返回实际已读取的字段数。
若函数调用时要求读取的字段数超过文件存放的字段数,则出错或已到文件尾,实际在操作时应注意检测。
fwrite( )函数从buf(缓冲区)指向的字符数组中,把count(字段数)个字段写到stream所指向的流中,每个字段为size个字符长,函数操作成功时返回所写字段数。
关于成块的文件读写,在创建文件时只能以二进制文件格式创建。
[例] 向磁盘写入格式化数据,再从该文件读出显示到屏幕。
input data:xiaowan j001 87.5 98.4xiaoli j002 99.5 89.6output from file:xiaowan j001 87.50 98.40xiaoli j002 99.50 89.60通常,对于输入数据的格式较为复杂的话,我们可采取将各种格式的数据当做字符串输入,然后将字符串转换为所需的格式。
C提供函数:int atoi(char *ptr)float atof(char *ptr)long int atol(char *ptr)它们分别将字符串转换为整型、实型和长整型。
使用时请将其包含的头文件math.h或stdlib.h写在程序的前面。
5. 文件中定位读写位置C语言提供在文件中定位的函数fseek。
可以重定位流上的文件指针位置。
int fseek(FILE *stream, long offset, int fromwhere);第一个参数stream为文件指针;第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移;第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、SEEK_END 或SEEK_SET。
SEEK_SET为文件开头,SEEK_CUR为当前位置,SEEK_END为文件结尾,其中SEEK_SET、SEEK_CUR和SEEK_END可以分别用0,1和2代替。
fseek函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。
如果执行失败(比如offset超过文件自身大小),则不改变stream 指向的位置。
成功返回0,否则返回其他值(<0)。
[例]程序例:fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
使用实例:。