c 读写文件
- 格式:rtf
- 大小:80.45 KB
- 文档页数:4
c语⾔⽂件读写⼤全对⽂件的读和写是最常⽤的⽂件操作。
在C语⾔中提供了多种⽂件读写的函数:1. 字符读写函数:fgetc和fputc2. 字符串读写函数:fgets和fputs3. 数据块读写函数:freed和fwrite4. 格式化读写函数:fscanf和fprinf下⾯分别予以介绍。
使⽤以上函数都要求包含头⽂件stdio.h。
字符读写函数fgetc和fputc字符读写函数是以字符(字节)为单位的读写函数。
每次可从⽂件读出或向⽂件写⼊⼀个字符。
1) 读字符函数fgetcfgetc函数的功能是从指定的⽂件中读⼀个字符,函数调⽤的形式为:字符变量=fgetc(⽂件指针);例如:ch=fgetc(fp);其意义是从打开的⽂件fp中读取⼀个字符并送⼊ch中。
对于fgetc函数的使⽤有以下⼏点说明:在fgetc函数调⽤中,读取的⽂件必须是以读或读写⽅式打开的。
读取字符的结果也可以不向字符变量赋值。
例如:fgetc(fp); 但是读出的字符不能保存。
在⽂件内部有⼀个位置指针。
⽤来指向⽂件的当前读写字节。
在⽂件打开时,该指针总是指向⽂件的第⼀个字节。
使⽤fgetc 函数后,该位置指针将向后移动⼀个字节。
因此可连续多次使⽤fgetc函数,读取多个字符。
应注意⽂件指针和⽂件内部的位置指针不是⼀回事。
⽂件指针是指向整个⽂件的,须在程序中定义说明,只要不重新赋值,⽂件指针的值是不变的。
⽂件内部的位置指针⽤以指⽰⽂件内部的当前读写位置,每读写⼀次,该指针均向后移动,它不需在程序中定义说明,⽽是由系统⾃动设置的。
【例13-1】读⼊⽂件c1.doc,在屏幕上输出。
1. #include<stdio.h>2. main(){3. FILE *fp;4. char ch;5. if((fp=fopen("d:\\jrzh\\example\\c1.txt","rt"))==NULL){6. printf("\nCannot open file strike any key exit!");7. getch();8. exit(1);9. }10. ch=fgetc(fp);11. while(ch!=EOF){12. putchar(ch);13. ch=fgetc(fp);14. }15. fclose(fp);16. }本例程序的功能是从⽂件中逐个读取字符,在屏幕上显⽰。
C语言读写文件操作#include <stdio.h>#include <string.h>#include <conio.h>FILE *stream;//, *stream2;FILE *stream2;void main( void ){int numclosed;char *list;list="这个程序由czw编写";//试图打开文件data.txt,如果该文件不存在,则自动创建if( (stream= fopen( "data.txt", "r" )) == NULL ){printf( "试图打开'data.txt'\n" );printf( "'data.txt'不存在\n" );printf( "'data.txt'被创建\n" );}elseprintf( "'data.txt'被打开\n" );//以写入方式打开if( (stream2 = fopen( "data.txt", "w+" )) == NULL )printf( "'data.txt'不存在\n" );else{printf( "'data.txt'成功被打开\n" );fwrite(list,strlen(list),30,stream2);printf("写入数据成功\n");}//如果文件data.txt存在,就会打开成功,则stream!=NULL,这时就关闭streamif (stream!=NULL)if( fclose( stream) )printf( "文件流 stream 被关闭\n" );//关闭所有打开的文件流,返回关闭的文件流个数numclosed = _fcloseall( );printf( "被关闭的文件流量: %u\n", numclosed );//按任意键后退出_getch();}字符串读写函数fgets和fputs一、读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针);其中的n是一个正整数。
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语⾔的⽂件读写,我将介绍下⾯这⼏种⽅式:字符的读写:使⽤ fgetc() 函数和 fputc() 函数;字符串的读写:使⽤ fgets() 函数和 fputs() 函数;格式化的读写(主要⽤于⽂本⽂件):使⽤ fscanf() 函数和 fprintf() 函数。
字符读写:1. fputc()函数fputc(c,fp); //⽤于将⼀个字符写⼊⽂件其中,fp为⽂件指针变量;c为要写⼊的字符,可以是字符常量或字符型变量。
函数返回值:如果执⾏成功,返回写⼊的字符;否则,返回EOF。
int main(){FILE *fp; //定义⽂件指针char ch; //字符指针fp=fopen("C://Users//Administrator//Desktop//tcc//trans//in.txt","w"); //打开⽂件,写⼊模式if(fp==NULL) //若fopen()函数返回NULL则打开⽂件失败{printf("⽂件打开失败\n");}else{printf("请输⼊内容(以回车结束):\n");while((ch = getchar()) != '\n') //读取字符进⾏写⼊,读取到“\n”结束{fputc(ch,fp);}}fclose(fp); //关闭⽂件return 0;}由于没有写循环,⽬前只能输⼊⼀⾏⽂本内容。
2. fgetc()函数c=fgetc(fp); //⽤来从指定的⽂本⽂件中读取⼀个字符。
其中,fp为⽂件指针,c为要写⼊的字符。
该函数的功能是从指定的⽂件中读取⼀个字符,并赋值给字符型变量c。
函数返回值:读取成功,返回读取字符;读取错误或遇到结束标志EOF,返回EOF。
int main(){FILE *fp; //定义⽂件指针char ch; //字符指针fp=fopen("C://Users//Administrator//Desktop//tcc//trans//in.txt","r"); //打开⽂件,只读模式if(fp==NULL) //若fopen()函数返回NULL则打开⽂件失败{printf("⽂件打开失败\n");}else{while((ch=fgetc(fp))!=EOF) //读取⽂件字符,直到返回fgetc()函数返回EOF{putchar(ch); //在显⽰窗⼝输出字符}putchar('\n'); //输出回车}fclose(fp);return 0;}字符串读写:1. fputs()函数fputs(s,fp); //⽤来将⼀个字符串写⼊指定的⽂本⽂件。
C、C++和MFC中文件的读写方法对文件读写的三种方法1.C中FILE *pFile=fopen("1.txt","w");fwrite("",1,strlen(""),pFile");//fseek(pFile,0,SEEK_SET);//fwrite("ftp:",1,strlen("ftp:"),pFile);//fwrite("",1,strlen(""),pFile");fclose(pFile);*///fflush(pFile);表头文件 #include<stdio.h>获取文件长度的方法:FILE *fp = fopen(filePath, "r");fseek(fp, 0, SEEK_END);//先移动到文件结尾处n = ftell(fp);fclose(fp);各个函数说明:FILE * fopen(const char * path,const char * mode);函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:int fseek( FILE *stream, long offset, int origin );第一个参数stream为文件指针第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SETSEEK_CUR:当前位置SEEK_END:文件结尾SEEK_SET:文件开头其中SEEK_CUR,SEEK_END和SEEK_SET依次为1,2和0int fwrite(buffer,size,count,fp);(1)buffer:是一个指针,对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语言是一种广泛应用于系统编程和应用软件开发的高级编程语言,它提供了丰富的文件读写操作函数,让程序员可以方便地操作文件数据。
在C语言中,文件读写操作主要包括打开文件、关闭文件、读取文件内容和写入文件内容等操作。
首先,要进行文件读写操作,需要使用C语言提供的标准库函数来实现。
在C语言中,常用的文件读写操作函数包括fopen()、fclose()、fread()、fwrite()、fgets()、fputs()等。
首先是打开文件操作。
通过调用 fopen() 函数可以打开一个文件,并返回一个指向该文件的指针。
fopen() 函数原型为:FILE *fopen(const char *filename, const char *mode); 其中,filename是要打开的文件名,mode是打开文件的模式,包括只读、只写、追加等。
例如,使用 "r" 模式表示只读操作,使用 "w" 模式表示只写操作。
接着是关闭文件操作。
在读写完文件内容后,需要调用 fclose() 函数来关闭文件,以释放系统资源。
fclose() 函数原型为:int fclose(FILE *stream); 其中,stream是指向要关闭的文件的指针。
关闭文件后,文件指针将不再有效。
在文件打开后,可以通过 fread() 函数读取文件内容。
fread() 函数原型为:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 其中,ptr是读取数据存放的缓冲区指针,size是每个数据项的大小,nmemb是要读取的数据项的个数,stream是指向要读取的文件的指针。
通过调用 fread() 函数,可以一次性读取指定大小的数据到指定的缓冲区中。
类似地,可以使用 fwrite() 函数将数据写入文件。
fwrite() 函数原型为:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 其中,ptr是写入数据的缓冲区指针,size是每个数据项的大小,nmemb是要写入的数据项的个数,stream是指向要写入的文件的指针。
C语⾔⽂件读写操作总结 ⽂件的打开操作 fopen 打开⼀个⽂件 ⽂件的关闭操作 fclose 关闭⼀个⽂件 ⽂件的读写操作 fgetc 从⽂件中读取⼀个字符 fputc 写⼀个字符到⽂件中去 fgets 从⽂件中读取⼀个字符串 fputs 写⼀个字符串到⽂件中去 fprintf 往⽂件中写格式化数据 fscanf 格式化读取⽂件中数据 fread 以⼆进制形式读取⽂件中的数据 fwrite 以⼆进制形式写数据到⽂件中去 getw 以⼆进制形式读取⼀个整数 putw 以⼆进制形式存贮⼀个整数 ⽂件状态检查函数 feof ⽂件结束 ferror ⽂件读/写出错 clearerr 清除⽂件错误标志 ftell 了解⽂件指针的当前位置 ⽂件定位函数 rewind 反绕 fseek 随机定位⽂件打开函数原型FILE *fopen(char *pname,char *mode)按照mode 规定的⽅式,打开由pname指定的⽂件。
若找不到由pname指定的相应⽂件,就按以下⽅式之⼀处理:(1)此时如mode 规定按写⽅式打开⽂件,就按由pname指定的名字建⽴⼀个新⽂件;(2)此时如mode 规定按读⽅式打开⽂件,就会产⽣⼀个错误。
打开⽂件的作⽤:(1)分配给打开⽂件⼀个FILE 类型的⽂件结构体变量,并将有关信息填⼊⽂件结构体变量;(2)开辟⼀个缓冲区;(3)调⽤操作系统提供的打开⽂件或建⽴新⽂件功能,打开或建⽴指定⽂件;FILE *:指出fopen是⼀个返回⽂件类型的指针函数;参数说明pname:是⼀个字符指针,它将指向要打开或建⽴的⽂件的⽂件名字符串。
mode:是⼀个指向⽂件处理⽅式字符串的字符指针。
为打开模式。
模式可以有r(允许读取),r+(允许读写),w(允许写⼊),a(允许追加)等模描述式r打开⼀个已有的⽂本⽂件,允许读取⽂件。
w打开⼀个⽂本⽂件,允许写⼊⽂件。
如果⽂件不存在,则会创建⼀个新⽂件。
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语言文件读写从文件编码的方式来看,文件可分为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++读写文件.txt这是一个禁忌相继崩溃的时代,没人拦得着你,只有你自己拦着自己,你的禁忌越多成就就越少。
自卑有多种档次,最高档次的自卑表现为吹嘘自己干什么都是天才。
C++文件流:
fstream // 文件流
ifstream // 输入文件流
ofstream // 输出文件流
cin.getline(字符指针,字符个数N,结束符)
getline(ifs,temp);
getline(in,temp);
//创建一个文本文件并写入信息
//同向屏幕上输出信息一样将信息输出至文件
#include<iomanip.h>
#include<fstream.h>
void main()
{
ofstream f1("d:\\me.txt"); //打开文件用于写,若文件不存在就创建它
if(!f1)return; //打开文件失败则结束运行
f1<<setw(20)<<"姓名:"<<"廉东方"<<endl; //使用插入运算符写文件内容f1<<setw(20)<<"家庭地址:"<<"河南郑州"<<endl;
f1.close(); //关闭文件
}
运行后打开文件d:\me.txt,其内容如下:
姓名:廉东方
家庭地址:河南郑州
文件操作:
打开文件
文件名
注意路径名中的斜杠要双写,如:
"D:\\MyFiles\\ReadMe.txt"
文件打开方式选项:
ios::in = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式) ios::out = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)
ios::ate = 0x04, //文件打开时,指针在文件最后。
可改变指针的位置,常和in、out联合使用
ios::app = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后
ios::trunc = 0x10, //在读写前先将文件长度截断为0(默认)
ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用
ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用
ios::binary = 0x80 //二进制格式文件
文件保护方式选择项:
filebuf::openprot; //默认的兼容共享方式
filebuf::sh_none; //独占,不共享
filebuf::sh_read; //读共享
filebuf::sh_write; //写共享
打开文件的方法
调用构造函数时指定文件名和打开模式
ifstream f("d:\\12.txt",ios::nocreate); //默认以 ios::in 的方式打开文件,文件不存在时操作失败
ofstream f("d:\\12.txt");//默认以ios::out的方式打开文件
fstream f("d:\\12.dat",ios::in|ios::out|ios::binary); //以读写方式打开二进制文件
使用Open成员函数
fstream f;
f.open("d:\\12.txt",ios::out); //利用同一对象对多个文件进行操作时要用到open函数
检查是否成功打开
成功:
if(f){...} //对ifstream、ofstream对象可用,fstream对象不可用。
if(f.good()){...}
失败:
if(!f){...} // !运算符已经重载
if(f.fail()){...}
读写操作
使用<<,>>运算符
只能进行文本文件的读写操作,用于二进制文件可能会产生错误。
使用函数成员 get、put、read、write等
经常和read配合使用的函数是gcount(),用来获得实际读取的字节数。
读写二进制文件注意事项
打开方式中必须指定ios::binary,否则读写会出错
用read\write进行读写操作,而不能使用插入、提取运算符进行操作,否则会出错。
使用eof()函数检测文件是否读结束,使用gcount()获得实际读取的字节数
关闭文件
使用成员函数close,如:
f.close();
利用析构函数
对象生命期结束时会检查文件是否关闭,对没有关闭的文件进行关闭操作。
随机读写文件
通过移动文件读写指针,可在文件指定位置进行读写。
seekg(绝对位置); //绝对移动,//输入流操作
seekg(相对位置,参照位置); //相对操作
tellg(); //返回当前指针位置
seekp(绝对位置); //绝对移动,//输出流操作seekp(相对位置,参照位置); //相对操作
tellp(); //返回当前指针位置
参照位置:
ios::beg = 0 //相对于文件头
ios::cur = 1 //相对于当前位置
ios::end = 2 //相对于文件尾
读写文本文件的示例
//为能够正确读出写入文件的各数据,各数据间最好要有分隔
#include<fstream.h>
void main()
{
fstream f("d:\\try.txt",ios::out);
f<<1234<<' '<<3.14<<'A'<<"How are you"; //写入数据
f.close();
f.open("d:\\try.txt",ios::in);
int i;
double d;
char c;
char s[20];
f>>i>>d>>c; //读取数据
f.getline(s,20);
cout<<i<<endl; //显示各数据
cout<<d<<endl;
cout<<c<<endl;
cout<<s<<endl;
f.close();
}
运行结果:
1234
3.14
A
How are you
Press any key to continue
显示文本文件的内容
//使用get()一次读一个字符--------------------------------方案一#include<fstream.h>
void main()
{
ifstream fin("d:\\简介.txt",ios::nocreate);
if(!fin){
cout<<"File open error!\n";
return;。