C语言文件读写

合集下载

c语言文件操作(主要打开方式的区别)

c语言文件操作(主要打开方式的区别)

文件使用方式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语言的文件读写

Linux下C语言的文件读写

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语言实现读写二进制文件

C语言实现读写二进制文件
PRODUCT = mysql_binary
.LIBPATTERNS: lib%.so lib%.a
vpath % .
vpath %.c src
vpath %.h include
OBJS = mysql_binary.o
$(PRODUCT): $(OBJS)
$(CXX) $(OBJS) -o $@ $(LIBS)
读:
FILE *fp = fopen("file.dat","r");
fread(plist,sizeof(Point),100,fp);
fread的返回值为实际读入的结构体Point的元素个数。
写:
FILE *fp = fopen("file.dat","w");
fwrite(plist,sizeof(Point),100,fp);
length = mysql_fetch_lengths(res_set);
for (i=0; i<mysql_num_fields(res_set); i++) {
fwrite(row[0], 1, length[0], fp);
}
}
fclose(fp);
mysql_close(conn);
free(sql);
exit(1);
}
if ((n = fread(buf, 1, *size, fp)) < 0) { //n=*size
perror("fread file" );
exit(1);
}
sql = (char *)malloc(sizeof(char)*n*2+256); //2n+1+strlen(other sql)

C语言读写文件两种方式ASCII和二进制。

C语言读写文件两种方式ASCII和二进制。

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语言中文本文件操作的主要函数在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语言实现二进制文件读写

C语言实现二进制文件读写

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语言的各种读写模式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语言读取文件每行并存放在数组中返回数组

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中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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字节处。

使用实例:。

相关文档
最新文档