C++文件操作,数据读写总结
2011-09-29 19:37
239 查看
1、数据 内存中 变量 磁盘上 文件
2、把数据从其他的设备搬到内存中 --- 输入 --- 读
把内存中的数据放到其他设备中 --- 输出 --- 写
3、流
物质的定向移动,输入输出流中是数据的定向移动
输入流的源头 : 文件 目的地:内存
输出流的源头 : 内存 目的地:文件
cout 源 :变量 目的地 :显示器
cin 键盘 内存中某一变量
6、标准输入流 cin istream的一个对象
标准输出流 cout ostream的一个对象
标准错误流 cerr 目的地都是屏幕,用cout替代
7、cin
是一个带有缓冲的标准的输入对象,默认输入设备是键盘
(1) >> : 自动校验数据类型
遇到回车才会开始读数据,遇到空格就结束,只能读一个单词
流是数据的定向移动,被读走的数据就消失,没有读走的数据会一直留在流中,直到流的消失,数据也跟着消失
流中有数据,就会阻塞,等待读取 --- 所有输入方法的特性
为什么 ">>"可以连续使用? 因为返回就是istream对象本身的引用
注意 : ">>" 不读回车,不读空格
(2)get(): 每次 读一个字符。返回一个整数,实际上是读到字符的ASCII码 把回车,空格都当作普通字符读出来
3)get(char&):把读到的内容存到参数中 cin.get(arr[0]).get(arr[1]); //get(char&)返回cin本身,可以连续使用
(4)getline(str,256) : 读取一行,包括空格,对于回车,只读走,不保存
会读取数组长度减1个字符,最后一个放'\0'。
输入数据超过给定的空间
(1)截断数据,剩下的数据还在流里
(2)设置一个错误标记,调用cin.clear(),清除错误,继续工作
(5)read(char*,int) char*是存结果的地址,int是读的长度,并且不能比前面的数组的空间大
读满为止 ,特殊字符也当做普通字符处理
超出的部分仍然存在流里面
只要数据没读满,一直阻塞
不会自动补'\0' --- 传参数的时候,数组长度传减1的长度,补齐'\0'以免乱码
所有输入流的共同特征:只要没数据就阻塞
读不完的就留在流里
(6)cin.ignore(255,'\n') 忽略255个字符或者遇到'\n',如果在前255个字符中出现'\n',则就忽略到'\n'之前的字符
(7)peek() 查看流里的第一个字符是什么
只察看,不读走
(8)putback() 向流中插入字符,前提必须有空位的时候
必须与get()一起使用,用get()取出一个字符,才能用putback()插入一个字符
(9)cin.fail()判断是否出现错误标志,一切正常返回false
读取文件:
8、ifstream
(1)需要#include <fstream>头文件
ifstream ifs("test.txt"); //创建一个ifstream的对象,打开文件,给构造函数传如一个参数,就是文要打开的文件名
//文件的在当前目录下找,也可以用相对路径或绝对路径找文件
在打开文件之后,立即判断打开文件是否成功
if( ifs.fail() ){
cout << "Can't open test " <<endl;
return 0;
}
if( ! ifs ){ //也可以这样判断文件打开是否出错
cout << "Can't open test " <<endl;
return 0;
}
(2)在文件结束的时候都会有"EOF"标志,作为文件结束的标志符
可以用判断是否读到"EOF",来判断时候读到文件尾了
if(ifs.eof()){
break;
}
(3)对于一个进程可打开文件的数量是有数的,所以文件属于资源
所以在使用完毕以后,要关闭文件输入流
9、输出操作cout
(1) << 操作 被输出到屏幕上的东西,只所以能输出,都是以字符串类型输出
也就是说这个操作有自动类型转换的功能
(2)put() 返回cout引用,可以连续调用
(3)write(buf,len) 按指定长度写到屏幕上 buf是char*类型
(4)cout.width(10); 打印的内容总共占10个字符,并靠右对齐
只对其后边的一个cout生效
(5)cout.fill('#'); 用'#'补齐空位
主要调用一次,对以后的都生效
(6)setf()操作,控制格式,教材188页
(7)特殊字符
'\r' 表示回退一个格,再输出
'\n' 回车
\\ 输出一个'\',因为'\'会被认为是转义字符
'\t' 一个tab键
(8)输出控制符
oct 按八进制输出 “0”
dec 十进制输出
hex 按十六进制输出 “0x”
flush 清空缓冲区 带缓冲区是因为和外部设备交涉,这样能减少向屏幕输出的次数,提高效率
回车、程序结束和flush都是刷新缓存的命令
cout << "a" <<flush ;
写文件:
10、ofstream
打开文件,把数据写进文件,关闭文件
ofstream ofs("ofstream.txt"); //打开文件,若文件不存在,创建,存在,打开
if(ofs.fail()){ //写文件失败,一般是权限问题
cout << "open file error "<<endl;
return 0;
}
在iostream头文件中cin cout对象已经被声明,可以直接使用,因为标准输入输出设备是唯一的,系统声明
但是fstream的对象要程序员来声明,因为对文件的输入输出是不唯一的
ofstream ofs("ofstream.txt" , ios::app); //以追加的形式向文件中写
ios::trunc 默认方式 把文件内容清空,写新的文件
ios::nocreate 不创建新文件
ios::noreplace 不改写,要创建新文件
组合多个 ofstream ofs("ofstream.txt" , ios::app | ios::in | ios::binary);
11、读写二进制文件
(1)ios::binary
(2)read/write 方法读写二进制文件,因为这两个方法只需要起始位置和大小就可以工作
2、把数据从其他的设备搬到内存中 --- 输入 --- 读
把内存中的数据放到其他设备中 --- 输出 --- 写
3、流
物质的定向移动,输入输出流中是数据的定向移动
输入流的源头 : 文件 目的地:内存
输出流的源头 : 内存 目的地:文件
cout 源 :变量 目的地 :显示器
cin 键盘 内存中某一变量
6、标准输入流 cin istream的一个对象
标准输出流 cout ostream的一个对象
标准错误流 cerr 目的地都是屏幕,用cout替代
7、cin
是一个带有缓冲的标准的输入对象,默认输入设备是键盘
(1) >> : 自动校验数据类型
遇到回车才会开始读数据,遇到空格就结束,只能读一个单词
流是数据的定向移动,被读走的数据就消失,没有读走的数据会一直留在流中,直到流的消失,数据也跟着消失
流中有数据,就会阻塞,等待读取 --- 所有输入方法的特性
为什么 ">>"可以连续使用? 因为返回就是istream对象本身的引用
注意 : ">>" 不读回车,不读空格
(2)get(): 每次 读一个字符。返回一个整数,实际上是读到字符的ASCII码 把回车,空格都当作普通字符读出来
3)get(char&):把读到的内容存到参数中 cin.get(arr[0]).get(arr[1]); //get(char&)返回cin本身,可以连续使用
(4)getline(str,256) : 读取一行,包括空格,对于回车,只读走,不保存
会读取数组长度减1个字符,最后一个放'\0'。
输入数据超过给定的空间
(1)截断数据,剩下的数据还在流里
(2)设置一个错误标记,调用cin.clear(),清除错误,继续工作
#include <iostream> using namespace std; int main(){ int age; char name[20] ; cout << "enter your age >"; cin >> age; cin.get(); //读取流中残余的回车,以便getline能正常工作 // cin.ignore(20,'\n'); //忽略20个字符或者碰到回车,从流中清除 cout << "enter your name >"; cin.getline(name,20); cout << "your age is :" << age << endl; cout << "your name is :" << name << endl; }
(5)read(char*,int) char*是存结果的地址,int是读的长度,并且不能比前面的数组的空间大
读满为止 ,特殊字符也当做普通字符处理
超出的部分仍然存在流里面
只要数据没读满,一直阻塞
不会自动补'\0' --- 传参数的时候,数组长度传减1的长度,补齐'\0'以免乱码
所有输入流的共同特征:只要没数据就阻塞
读不完的就留在流里
(6)cin.ignore(255,'\n') 忽略255个字符或者遇到'\n',如果在前255个字符中出现'\n',则就忽略到'\n'之前的字符
(7)peek() 查看流里的第一个字符是什么
只察看,不读走
(8)putback() 向流中插入字符,前提必须有空位的时候
必须与get()一起使用,用get()取出一个字符,才能用putback()插入一个字符
(9)cin.fail()判断是否出现错误标志,一切正常返回false
读取文件:
8、ifstream
(1)需要#include <fstream>头文件
ifstream ifs("test.txt"); //创建一个ifstream的对象,打开文件,给构造函数传如一个参数,就是文要打开的文件名
//文件的在当前目录下找,也可以用相对路径或绝对路径找文件
在打开文件之后,立即判断打开文件是否成功
if( ifs.fail() ){
cout << "Can't open test " <<endl;
return 0;
}
if( ! ifs ){ //也可以这样判断文件打开是否出错
cout << "Can't open test " <<endl;
return 0;
}
(2)在文件结束的时候都会有"EOF"标志,作为文件结束的标志符
可以用判断是否读到"EOF",来判断时候读到文件尾了
if(ifs.eof()){
break;
}
(3)对于一个进程可打开文件的数量是有数的,所以文件属于资源
所以在使用完毕以后,要关闭文件输入流
9、输出操作cout
(1) << 操作 被输出到屏幕上的东西,只所以能输出,都是以字符串类型输出
也就是说这个操作有自动类型转换的功能
(2)put() 返回cout引用,可以连续调用
(3)write(buf,len) 按指定长度写到屏幕上 buf是char*类型
(4)cout.width(10); 打印的内容总共占10个字符,并靠右对齐
只对其后边的一个cout生效
(5)cout.fill('#'); 用'#'补齐空位
主要调用一次,对以后的都生效
(6)setf()操作,控制格式,教材188页
(7)特殊字符
'\r' 表示回退一个格,再输出
'\n' 回车
\\ 输出一个'\',因为'\'会被认为是转义字符
'\t' 一个tab键
(8)输出控制符
oct 按八进制输出 “0”
dec 十进制输出
hex 按十六进制输出 “0x”
flush 清空缓冲区 带缓冲区是因为和外部设备交涉,这样能减少向屏幕输出的次数,提高效率
回车、程序结束和flush都是刷新缓存的命令
cout << "a" <<flush ;
写文件:
10、ofstream
打开文件,把数据写进文件,关闭文件
ofstream ofs("ofstream.txt"); //打开文件,若文件不存在,创建,存在,打开
if(ofs.fail()){ //写文件失败,一般是权限问题
cout << "open file error "<<endl;
return 0;
}
在iostream头文件中cin cout对象已经被声明,可以直接使用,因为标准输入输出设备是唯一的,系统声明
但是fstream的对象要程序员来声明,因为对文件的输入输出是不唯一的
ofstream ofs("ofstream.txt" , ios::app); //以追加的形式向文件中写
ios::trunc 默认方式 把文件内容清空,写新的文件
ios::nocreate 不创建新文件
ios::noreplace 不改写,要创建新文件
组合多个 ofstream ofs("ofstream.txt" , ios::app | ios::in | ios::binary);
11、读写二进制文件
(1)ios::binary
(2)read/write 方法读写二进制文件,因为这两个方法只需要起始位置和大小就可以工作
相关文章推荐
- C#.NET示例读写xml所有节点的代码实现方法和读取xml节点的数据总结
- 读写xml所有节点个人小结 和 读取xml节点的数据总结
- PL/SQL 从数据库读写数据到文件的相关功能总结
- 基础学习总结(三)--文本、SD卡数据读写
- 读写xml所有节点个人小结 和 读取xml节点的数据总结
- 读写xml所有节点个人小结 和 读取xml节点的数据总结
- 读写xml所有节点个人小结 和 读取xml节点的数据总结
- HBase数据的读写流程总结
- C#.NET示例读写xml所有节点的代码实现方法和读取xml节点的数据总结
- C#不使用DataSet操作XML,XmlDocument读写xml所有节点及读取xml节点的数据总结
- Hadoop总结:在java中使用FileSystem的api读写数据(能力工场--小马哥原创)
- 读写xml所有节点个人小结和读取xml节点的数据总结
- 读写xml所有节点个人小结 和 读取xml节点的数据总结
- 读写xml所有节点个人小结 和 读取xml节点的数据总结
- Hadoop总结:在java中使用FileSystem的api读写数据(能力工场)
- 读写xml所有节点个人小结 和 读取xml节点的数据总结
- 【转】读写xml所有节点个人小结 和 读取xml节点的数据总结
- java读写数据总结
- 文件的读写(I/O)操作总结(二)——读取Assets中的文件数据
- 读写xml所有节点个人小结 和 读取xml节点的数据总结