问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++中fopen函数读文件怎么用文件数据?

发布网友 发布时间:2022-04-26 18:56

我来回答

2个回答

热心网友 时间:2023-07-10 04:53

本文分别简单讲述了如何利用C和C++库函数对文件的读写,涵盖了常用的文件操作函数。网上关于C/C++文件操作的介绍的博客很多,所以本文也大同小异,也主要是做一个备忘,不有每次都百度了。但本文重点在于几个库函数的运用,而不是从文件的属性或分类开始。
一、C文件操作:
C语言中,文件的操作都是通过一个FILE类型的文件指针进行,也就是说只有通过文件指针,才能调用相应的文件。FILE是一个由系统定义的结构体(定义在stdio.h中),可以存放文件的相关信息。
文件的打开(fopen函数)
文件的操作过程一般为:打开 => 读/写 => 关闭。
fopen函数的原型如下:
FILE* fopen(const char* filename, const char* mode);
函数调用就比较简单了:
FILE* fp;
fp = fopen("file1.txt", "r");
如果打开成功,返回file1.txt文件的指针,如果打开失败,返回一个NULL指针,所以调用fopen()后我们需要检查fp的值才进行下一步操作。fopen()的第一个参数为文件名,第二个参数为文件打开方式,含义如下表:
说明: 1. 使用"r"时,如果文件不存在,则出错。
2. 使用"w"时,如果没有文件,则创建一个新文件。
3. 使用"a"时,如果希望向文件尾添加数据,则该文件必须存在,否则出错。
4. "r+","w+","a+"都是可以输入和输出数据,但必须遵守上述3点
5. 操作二进制文件时,加上"b"字符,且二进制文件对换行符不会进行转换,而文本文件会将换行符转换为回车和换行两个字符。
文件的关闭(fclose函数)
在使用完一个文件后,若不关闭则会造成系统资源泄漏。使用fclose()关闭文件即可,原型为 int fclose(FILE* fp)。使用:fclose(fp); flose()返回0时为顺利关闭文件,否则返回EOF(-1)。
文件的读写
1) fputc(), fgetc()分别为从文件流中写和读一个字符,原型分别如下:
写:int fputc(int c, FILE* fp); 读:int fgetc(FILE* fp); 失败时均返回EOF
2) fputs(), fgets()分别为从文件流中写和读一个字符串,原型分别如下:
写:int fputs(const char* str, FILE* fp); 例如: fputs("I love this game!", fp);
读:char* fgets(char* str, int n, FILE* fp); 从流中读取n-1个字符或读完一行,参数str用于接收读取的字符串。注意当读取一行时,不包括行尾的'\n'字符。
3) fseek() 一般用于二进制模式打开的文件中,功能是定位到流中指定的位置。原型如下:
int fseek(FILE* fp, lont offset, int whence); 参数offset是移动的字符数,whence是移动的基准,取值是:
SEEK_SET 0 //文件开头
SEEK_CUR 1 //当前读写的位置
SEEK_END 2 //文件尾部
4) fprintf(),fscanf()是将数据按格式输出输入到文件流中,用法类似printf()和scanf()。原型分别如下:
int fprintf(FILE* fp, const char* format, ...); 它与printf()不同的就是将数据写到了文件流中,而不是控制台罢了。
int fscanf(FILE* fp, cosnt char* format, ...); 从文件流中按格式读取,与scanf()不同的就是数据是从文件流中读取而已。
例如: fprintf(fp, "count=%d", 5); fscanf(fp, "%d", &x);
5) feof()是检测是否已到文件尾,是返回真,否则返回0,原型是 int feof(FILE* fp);
6) rewind() 则是把当前的读写位置回到文件开始,相当于 fseek(fp, 0L, SEEK_SET); 原型: void rewind(FILE* fp);
7) remove() 删除文件,原型: int remove(const char* filename); 参数为要删除的文件名,成功则返回0;
8) fread(), fwrite() 它们相当于可将一块的数据读出或写入,相当的方便。原型如下:
size_t fread(void* ptr, size_t size, size_t n, FILE* fp); 从流中读指定个数的字符,size是每块的字节娄,n则是读取的块数。
size_t fwrite(const void* ptr, size_t size, size_t n, FILE* fp); 类似的是向文件流中写入n块size字节数的数据。可以看到数据指针为void*型,即可以使用任何类型的指针来替换。例如:
现在一个结构体: struct student_t{char name[16]; int id; int age;}; 创建三个学生的数据并赋值:struct student_t stu[3];
这时,当我们找开文件后(一般是进制模式),可以调用fwrite()将三个学生的数据都写入到文件中,两种方式:
for(int i = 0; i < 3; ++i)
fwrite(&stu[i], sizeof(struct student_t), 1, fp);
或者:fwrite(stu, sizeof(struct student_t), 3, fp);
些时,我们调用fread()函数便可很轻松的将刚才写入的3个学生的数据读取出来:
struct student_t stus[3];
for(int i = 0; i < 3; ++i)
fread(&stus[i], sizeof(struct student_t), 1, fp);
或者:fread(stus, sizeof(struct student_t), 3, fp); 这样便可将三个学生的数据读入到stus变量中了(有木有很方便呐)
注意:如果你发现使用fread()读取之后,最后一个学生读取的数据不完全,可能是由于你没有使用二进制模式打开的原因。
9) 最后是tmpfile()和tmpnam(),前者为生成一个临时文件,后者为生成一个唯一的文件名,具体使用在此不介绍了。
二、使用C++中的fstream文件流操作类进行文件的读写
使用fstream操作文件与使用C库函数类似,只不过fstream为面向对象方式,或多了上些C++的特性。首先,这里大概有三个流:
fstream为文件输入输出流,ifstream为输入文件流,ofstream为输出文件流,它们与ostream不同的就流的目的地为文件,而不是控制台。这里只介绍与上述的一些不同点:
1. 打开文件,如可以是 ifstream input_file("file2.txt"); 这样将会以默认方式打开file2.txt文件并进行读取。也可使用open()方式打开一个文件,并指定打开方式,例如:
ifstream input_file;
input_file.open("file2.txt", ios::binary);
打开后,可以使用is_open()检测是否打开成功:
if(input_file.is_open()){},然后可以使用流操作符向文件写数据了,例如:
input_file << "this is a test line";
input_file << "another info";
另外,这里的文件打开方式在ios空间下:
ios::app 添加到文件尾
ios::ate 把文件标志放在末尾而非起始。
ios::trunc 默认. 截断并覆写文件。
ios::nocreate 文件不存在也不创建。
ios::noreplace 文件存在则失败。
ofstream使用方式类似,读取一行数据可以使用getline(buf, count), 类型于fgets()。fstream类还提供一个很多其它方法,如fclose()为关闭文件,eof()用于检测状态是否已经到了文件末尾。
这里还有两个类似于上述的fread()和fwrite()函数,是read(), write(),功能和用法类似类似,例如:
output_file.write((const char*)stu, 3 * sizeof(struct student_t));
input_file.read((char*)stus, 3 * sizeof(struct student_t));
注意,这里也需要使用二进制模式打开,否则read的时候最后的上些数据读不完全。调用上面两个函数后可以使用bad()来检测文件流对象是否错误,例如,if(input_file.bad()){printf("error when read file\n"); return;},最后input_file.close()即可。
最后,C/C++文件的操作并不复杂,多使用几次便可熟练掌握,需要注意的就是文件的打开方式,和当用同一个文件指针进行又读又写时,注意文件指针位置的移动。

热心网友 时间:2023-07-10 04:53

用变量存储啊
一般是已知这个文件中内容的格式,就直接fin>>就行了
有时候也会读到一些字符串里慢慢分析
楼主问的是C++??C++不用fopen
c++中fopen函数读文件怎么用文件数据?

\x0d\x0a文件的打开(fopen函数)\x0d\x0a 文件的操作过程一般为:打开 =&gt; 读/写 =&gt; 关闭。\x0d\x0afopen函数的原型如下:\x0d\x0a FILE* fopen(const char* filename, const char* mode); \x0d\x0a函数调用就比较简单了:\x0d\x0a FILE* fp;\x0d\x0a fp ...

C语言中fopen函数打开文件后,文件以何种方式读入内存?

C语言fopen函数用于打开文件。函数原型:FILE * fopen(const char * path,const char * mode);参数:path 字符串类型,表示文件所在的路径,包括文件名mode 打开文件的模式、返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。mode:r 以只读方式打开文件,该...

c语言fopen函数的用法

在C语言中,`fopen`函数用于打开文件,并返回一个文件指针供后续操作使用。其语法形式为:`FILE *fopen;`。其中,`filename`是要打开的文件名,`mode`是打开文件的模式。详细解释:1. 函数定义:`fopen`是C标准库中的一个函数,定义在头文件``中。它用于打开文件,并返回一个文件指针。2. 参数说...

c语言从文档中读取出来的数怎么运用

w+: 以读写的方式打开文件,允许读写,若文件存在,文件中原有内容会被清除;若文件不存在,则创建文件,打开成功后返回文件指针,位置指针指向文件头部 a: 以追加、只写的方式打开文件,只允许写。若文件存在,则追加的内容添加在文件末尾,若文件不存在,则创建文件。打开成功后返回文件指针,位...

C文件操作1:如何写入读取?fopen的6种组合参数怎么用?

C语言中的文件操作涉及一系列关键步骤,包括文件的打开、写入、读取和关闭。首先,文件操作的基础始于fopen()函数,它用于指定文件路径并获取文件指针,其打开方式参数有六种组合。打开文件时,参数分为两部分:一是读写操作选择(r, w, a或rw, wa, ra),另一部分是对基本操作的补充(t, b, +)...

C语言文件读写结构体里面的数据怎样存到磁盘文件上

fwrite(&amp;v, sizeof(v), 1, fp); //写入文件。 fclose(fp);//关闭文件。 return 0;}当需要读取的时候,按照类似的流程,通过fread读取即可。该操作优势为:a 代码简单。b 存储的数据文件大小固定,就是结构体占用内存空间的整数倍。这样在读的时候就可以根据文件的大小直接判断出一共存储...

使用fopen()函数打开一个文件时,读写指针一定在文件首?对不对?

根据实际的读写要求。如果是续写,那起始的指针位置就在文件的末尾。通常填入“附加”;另外还可以使用“a+”来读和写更新。该文件已更新为“r+”读和写更新。将更新写入“w+”。fopen函数在当前目录中打开一个文件,调用的一般形式是:文件指针名称=fopen(文件名,文件模式);“文件指针名称”必须声明...

C语言fopen函数和其参数

fopen()是一个文件I/O 里面的函数 功能是打开一个文件。其原型是 FILE *fopen(char *filename,char *mode)返回值 :正常打开 返回指向文件结构体的指针。失败,返回NULL;要用这个函数是首先要定义一个 文件指针,例 FILE *fp=NULL;fp=fopen(“./txt”,"r"); 就是以只读的方式打开当前...

C语言 文件操作,要读取一个txt文件内容

在C语言中,文件操作都是由库函数来完成的。要读取一个txt文件,首先要使用文件打开函数fopen()。fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式...

c语言fopen函数的函数介绍

例如:FILE *fp;fp=fopen("file a","r");其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。又如:FILE *fphzkfphzk=fopen("c:\\hzk16","rb");其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反...

文件中利用fopen函数打开文件 fopen函数的文件名怎么找 fopen函数打开文本文件 fopen打开文件函数格式 fopen函数打开文件失败 fopen函数打不开文件 fopen函数打开文件失败返回值 fopen函数打开文件失败原因 c语言中fopen函数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
上海大名城映_有多少户? 英特尔处理器漏洞有哪些害? 英特尔漏洞都会影响哪些CPU?下一代还会影响吗? cpu使用率100%是怎么回事呀? 生姜红茶减肥法骗局 鲁东大学大一新生电话卡是用的学校发的联通卡吗? 鲁东大学用移动的多还是用联通的多?求师哥师姐们解答 ...牙齿一碰到溃疡就疼,治疗口腔溃疡的偏方有哪些呢? 我想找一个飞车情侣名字,我有车队,车队名字是丿茗门丨灬 梦幻悟空传变态版安卓APK fopen用法问题(菜鸟级) fopen可以打开哪些位置的文件 请问fopen具体怎么用? 请问fopen能打开什么格式的文件 内存双通道是什么意思?有什么优缺点 兰州新区离马蹄沟煤矿之间有多远 兰州新区距永豋县城有多少公里 兰州新区到天祝怎么走?多少公里 兰州新区离银川有多少公里 兰州皋兰县离兰州新区有多少公里 兰州城关区高新里兰州新区有多远 兰州市红古区政府到兰州新区多少公里 兰州新区成县有多少公里 中川机场距离兰州新区多少公里? 兰州西站与兰州新区有多远距离 靖远烟洞沟到兰州新区多少公里? 兰州至兰州新区多远 兰州新区离兰州市多少公里? 华为怎么拍全景照片全 兰州到兰州新区多少公里路 fopen 的使用 C语言中的fopen 丝瓜瓤的药用价值 丝瓜瓤有什么药用?泡水喝能治鼻炎吗? 丝瓜瓤的丝瓜瓤作用 丝瓜络有哪些保健效果,主要要体现有哪些保健性能?请教专家!谢谢!_百... 丝瓜须的功效与作用 我是中专毕业生,我想考个大专证,好考吗,能考吗? 不读大专,可以考大专证吗? 大专学历可以考医师证吗? 函授大专能考什么证书? 我只是一个初中毕业生想考大专毕业证,能考吗,要怎么考? 邮政编码313009是哪里 中国,浙江,湖州市,德清县,禹越镇的邮编 湖州市吴兴区邮编号码是什么 湖州 邮编 新天地 湖州织里邮编是多少 李佳琦谈坚持的力量,你从他身上学到了什么? 什么是坚持的力量 作文坚持的力量六百字