版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+ 简单读写文本文件、统计文件的行数、读取文件数据到数组fstream提供了三个类,用来实现c+对文件的操作。(文件的创建、读、写)。ifstream - 从已有的文件读ofstream - 向文件写内容fstream - 打开文件供读写文件打开模式:ios:in 读ios:out 写ios:app
2、; 从文件末尾开始写ios:binary 二进制模式ios:nocreate 打开一个文件时,如果文件不存在,不创建文件。ios:noreplace 打开一个文件时,如果文件不存在,创建该文件ios:trunc
3、60; 打开一个文件,然后清空内容ios:ate 打开一个文件时,将位置移动到文件尾文件指针位置在c+中的用法:ios:beg 文件头ios:end 文件尾ios:cur 当前位置例子:file.seekg(0,ios:beg); /让文件指针定位到文件开头 file.seekg(0,ios:end);
4、; /让文件指针定位到文件末尾 file.seekg(10,ios:cur); /让文件指针从当前位置向文件末方向移动10个字节 file.seekg(-10,ios:cur); /让文件指针从当前位置向文件开始方向移动10个字节 file.seekg(10,ios:beg); /让文件指针定位到离文件开头10个字节的位置常用的错误判断方法:good() 如果文件打开成功bad() 打开文件时发生错误eof()
5、; 到达文件尾实例:一、写入文件#include <iostream>#include <fstream>using namespace std;void main() ofstream in;in.open("com.txt",ios:trunc); /ios:trunc表示在打开文件前将文件清空,由于是写入,文件不存在则创建int i;char a='a'for(i=1;i<=26;i+)/将26个数字及英文字母写入文件 if(i<10)
6、; in<<"0"<<i<<"t"<<a<<"n" a+; else in<<i<<"t"<<a<<"n" a+; in.close();/关闭文
7、件打开com.txt,效果如下:二、读取文件上面仅仅是将文本写入文件,并没有读取出来。以下为读取文件的一种方法:将文件每行内容存储到字符串中,再输出字符串#include <iostream>#include <fstream>using namespace std;void main()char buffer256;fstream out;out.open("com.txt",ios:in);cout<<"com.txt"<<" 的内容如下:"<<endl;while(!o
8、ut.eof() out.getline(buffer,256,'n');/getline(char *,int,char) 表示该行字符达到256个或遇到换行就结束 cout<<buffer<<endl;out.close();cin.get();/cin.get() 是用来读取回车键的,如果没这一行,输出的结果一闪就消失了逐个字符的读取文件:#include <iostream>#include <fstream>using namespace std;void main()fs
9、tream in;char c;in.open("comn.txt",ios:in);while(!in.eof() in>>c; cout<<c;in.close();cin.get();这个方法读取的文件,所有字符都一起显示,不会分行。这里字母z显示两次,是正常的,因为在输出文件最后一个字母z之后,又输出了一次(可以仔细考虑程序代码)。读取文件某一行内容:#include <iostream>#include <fstream>#include <string>u
10、sing namespace std;int CountLines(char *filename)ifstream ReadFile;int n=0;string tmp;ReadFile.open(filename,ios:in);/ios:in 表示以只读的方式读取文件if(ReadFile.fail()/文件打开失败:返回0 return 0;else/文件存在 while(getline(ReadFile,tmp) n+; re
11、turn n;ReadFile.close();string ReadLine(char *filename,int line)int lines,i=0;string temp;fstream file;file.open(filename,ios:in);lines=CountLines(filename);if(line<=0) return "Error 1: 行数错误,不能为0或负数。"if(file.fail() return "Error 2: 文件不存在。"if(line>lin
12、es) return "Error 3: 行数超出文件长度。"while(getline(file,temp)&&i<line-1) i+;file.close();return temp;void main()int l;char filename256;cout<<"请输入文件名:"<<endl;cin>>filename;cout<<"n请输入要读取的行数:"<<endl;cin>>l;c
13、out<<ReadLine(filename,l);cin.get();cin.get();很显然,根据以上程序,利用循环,可以逐行读取整个文件内容。三、统计文件的行数#include <iostream>#include <fstream>using namespace std;int CountLines(char *filename)ifstream ReadFile;int n=0;char line512;ReadFile.open(filename,ios:in);/ios:in 表示以只读的方式读取文件if(ReadFile.fail()/文件
14、打开失败:返回0 return 0;else/文件存在 while(!ReadFile.eof() ReadFile.getline(line,512,'n'); n+; return n;ReadFile.close();void main()cout<<"comn.txt的行数为: "<<CountLines("comn.txt
15、")<<endl;cin.get();以上程序的设计思路没有问题,但在实际操作的时候会发现统计出的行数与实际不符,原因在于ReadFile.getline(line,512,'n')这一句:当一行字符超过512或遇到回车之后,行数自动加1.如果换行符在新的一行,返回的结果会比实际多1;如果不在新的一行,返回结果与实际相符。可以修改如下:#include <iostream>#include <fstream>#include <string>using namespace std;int CountLines(char
16、*filename)ifstream ReadFile;int n=0;char line512;string temp;ReadFile.open(filename,ios:in);/ios:in 表示以只读的方式读取文件if(ReadFile.fail()/文件打开失败:返回0 return 0;else/文件存在while(getline(ReadFile,temp) n+; return n;ReadFile.close();void main()cout<<"comn.txt的行
17、数为: "<<CountLines("comn.txt")<<endl;cin.get();四、读取文件数据到数组#include <iostream> #include <fstream>#include <string>using namespace std;int CountLines(char *filename)/获取文件的行数ifstream ReadFile;int n=0;string temp;ReadFile.open(filename,ios:in);/ios:in 表示以
18、只读的方式读取文件if(ReadFile.fail()/文件打开失败:返回0 return 0;else/文件存在,返回文件行数 while(getline(ReadFile,temp) n+; return n;ReadFile.close();void main() ifstream file; int LINES;char filename512;cout<<"请输入要打开的文件名:"<<endl;cin>>filename;file.open(filename,ios:in);if(file.fail()cout<<"文件不存在."<<endl;file.close();cin.get();cin.get();else/文件存在LINES=CountLines(fi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于区块链的审计轨迹完整性与可信度研究
- 基于可再生能源的农村地区集中式供暖解决方案
- 链家房产经纪人岗位的面试经验总结
- 双J管护理新进展与趋势
- 护理与医疗技术发展
- 安环主任职业规划方案
- 护理员护理伦理与案例分析
- 优势职业规划策略
- 护理带教核心技能培训
- 零售业项目策划与执行的面试指南
- 2025年医院党支部书记党建工作述职报告
- 大疆创新软件测试工程师晋升答辩含答案
- GB/T 46595-2025排水泵站一体化设备
- 幼儿园黄河介绍
- 内衣定制代加工合同
- 自救器课件培训课件
- 房建项目施工知识培训课件
- 黑马程序员合同模板(3篇)
- 2024年公共营养师之三级营养师真题及答案
- 医药ka专员培训课件
- 智能工厂总体架构及数字化应用解决方案
评论
0/150
提交评论