C++学习摘要6
来源:互联网 发布:金蝶软件好用吗 编辑:程序博客网 时间:2024/05/21 04:44
第15章 C++中文件处理
文件的基本概念及优点
使用文件的优点:
1.程序可以对不同的输入进行处理。
2.方便用户处理。
3.不受内存大小限制。文件操作的步骤
1.建立流对象
2.打开或建立文件
3.进行读写操作
4.关闭文件
对文件操作的流主要有三个:fstream(输入输出流),ifstream(输入流),ostream(输出流),
#include<iostream>#include<fstream>using namespace std;int main(){ //fstream的使用 char buffer[256]; fstream out; out.open("com.txt",ios::in); cout<<"文件的内容如下:"<<endl; while(!out.eof()){ out.getline(buffer,256,'\n'); cout<<buffer<<endl; } out.close(); return 0;}
#include<iostream>#include<fstream>#include<string>using namespace std;int CountLine(char *fileName){ //ifstream的使用 ifstream readFile; int n = 0; char line[512]; string temp; readFile.open(fileName,ios::in); if(readFile.fail()){ return 0; }else{ while(getline(readFile,temp)){ n++; } return n; } readFile.close();}int main(){ int n=0; n = CountLine("com.txt"); cout<<"该文本的行数为:"<<n<<endl; return 0;}
#include<iostream>#include<fstream>using namespace std;int main(){ ofstream in; in.open("com.txt",ios::trunc); int i ; char a = 'a'; for(int i = 0;i<= 26; i++){ if(i<10){ in<<"0"<<i<<"\t"<<a<<"\n"; a++; }else{ in<<i<<"\t"<<a<<"\n"; a++; } } in.close(); return 0;}
文件的打开与关闭
fstream类中的open函数,其原型为:
void open(const *filename,int mode,int access);
其中filename为文件名,mode为打开方式,access为文件的属性常见的打开方式有:
ios::app—>以追加的形式打开文件
ios::ate—->打开后定位到文件尾,ios::app中自动含有该属性
ios::binary->二进制形式打开
ios::in–>输入方式 ios::out—>输出形式
ios::nocreat–>不创建文件,如果这个文件不存在则会打开失败
ios::noreplace–>不覆盖,如果文件已经存在会打开失败
ios::trunc—>如果文件存在则文件长度置为0
可以使用或|来连接使用多个符号如ios::app|ios::biary…
文件属性取值有:
0 普通文件打开访问
1 只读文件
2 隐含文件
3 系统文件文件的关闭则调用close函数.
一个流对象只有关闭已经打开的流文件后,才能打新的流文件。读写文本文件
1.使用变量写入写出
ifstream infile; char value; infile.open("com.txt"); if(infile.is_open()){ while(infile.get(value)) cout<<value; } //outfile<<"efg"; cout<<endl;
2.使用get(),getline(),put()
- 操作二进制文件
仍旧可以用上面文本操作的方法处理,如getline()等读取,但是没有什么意义。
#include<iostream>#include<fstream>using namespace std;const char * filename = "a.txt";int main(){ char * buffer; long size; fstream outfile(filename,ios::out|ios::app|ios::binary|ios::trunc); int temp = 100; outfile.write((char *)(&temp),sizeof(temp)); outfile.close(); cout<<"写入完毕"<<endl; //等价于另一种构造方法 //fstream file; //file.open(filename,ios::in|ios::binary|ios::ate); ifstream file(filename,ios::in|ios::binary); int readInt=10; file.read((char *)(&readInt),sizeof(readInt)); file.close(); cout<<readInt<<endl; cout<<"读取完毕"<<endl; return 0;}
疑难解惑
1.get()和getline()有什么区别?
虽然都是整行读取,但是get()每次读取的时候把Enter建生成的换行符留在输入队列中,getline则将其抛弃。
2.缓存同步如何实现?
对文件流进行操作时,它们会与一个streambuf类型的缓存一起。缓存其实就是一块内存空间,做为流和物理文件的媒介。
缓存的同步即将(有时在输入的时候)缓存清空或缓存写入物理媒介的过程。会在以下任一情况发生。
1.文件关闭时。还未写出或写入的缓存要进行同步。
2.缓存满时。
3.控制符明确指明时如flush和endl。
4.调用sync()函数
第16章 异常处理
- 异常处理机制
try-catch
#include<iostream>using namespace std;double fuc(double x,double y){ if(y == 0){ throw y; } return x/y;}int main(){ double res; try{ res = fuc(2,3); cout<<"结果是:"<<res<<endl; res = fuc(2,0);//会抛出异常 }catch(double){//根据抛出异常的类型进行匹配 cout<<"Error of dividing zero"<<endl; }}
关于抛异常的注意点:
1.在异常作用域中,被new出来的对象在抛出异常时不会自动析构,所以抛之前要手动析构。
2.throw对象引用时,拷贝的是引用的对象,而非拷贝引用的名称。
捕获所有异常
catch(…){}与java中的finally存在差别,finally无论如何会执行,catch(..)只是捕获所有异常,如果在之前捕获了其他异常则不会执行这里面的代码。未捕获异常
如果发现一个异常在该函数的catch字句列表中不存在,则在其调用该函数的上一级中查找是否存在匹配的catch字句,(即逆着嵌套函数调用链向上继续)如果最终在main函数中都不存在,则会终止程序。异常的类层次体系
所有的标准异常处理类均派生自Execption类,每个类都支持一个what(),返回一个描述异常的char *字符串。
疑难解惑
如果抛出异常而未捕获会怎样?
一直上传到C++运行系统那里,最终终止整个程序异常处理通过什么来匹配
仅仅通过类型而不是通过值类匹配,所以catch块的参数可以没有参数名称,只要参数类型
- C学习摘要
- C语言学习摘要
- C语言学习摘要
- C++学习摘要6
- 计算机网络 学习摘要(6)
- 《C和指针》第三章学习摘要
- 《C和指针》第四章学习摘要
- 《C和指针》第五章学习摘要
- effect java 学习摘要(6)
- c摘要
- 学习摘要
- 学习摘要
- 读《C和指针》笔记摘要【6】
- iPhone 程式設計入門(6) Object-C 摘要
- C语言入门和基本数据类型学习摘要
- 我的c学习: 数值数据类型及表示 课件摘要
- 高质量嵌入式Linux C编程学习摘要
- c初学笔记摘要
- 一个组合的Loading动画(源码+GIF)
- Oops中的error code解释
- 【C语言】简单思路找一个数组中重复次数最多的数
- 在Linux中使用VS Code编译调试C++项目
- 发现Socekt的好文,适合新手
- C++学习摘要6
- 重入锁(ReentrantLock)和synchroinzed区别
- nlog日志配置
- 使用Python估计数据概率分布函数
- 如何避免统计图中数据显示过长
- android 4.4 按键分析二
- 大数据简析“林丹出轨事件”背后的微博信息传播
- 真机编译错误Bug-记录
- Vue--组件部分