C++文件流
来源:互联网 发布:淘宝店铺主图尺寸 编辑:程序博客网 时间:2024/06/04 18:19
1.stream类,C++中所有的I/O流都以些“流”类为基础,包括文件标准IO,I/O(fstream, ifstream, ofstream),字符串IO(stringstream, istringstream, ostringstream)
2.打开和关闭。
(1)Fstream fio("filename");
或 fstream fio; fio.open("filename", fstream::out | fstream::app, 0);
(1)文件模式。即open函数的第二个参数设置,
In: 读,定位文件头,不清空。
Out: 写,定位文件尾,清空文件数据。
App: 写时定位到文件尾,不清空。
Ate: 打开时定位文件尾,不清空。
Trunc: 打开时清空。
Binary: 二进制读写,
同时以in|out模式打开进不清空,即fstream的默认模式。
(2)fio.close();
如需再用,必须先close(), 再clear(),然后用open()打开另一文件。
3.读写文件
(1)文本文件。
读“>>”,写“<<”。
=>写时会把换行符"\n"(十进制为10)自动扩充为回车加换行符(十进制为13和10),所以当写入的是整数10时也会被转成13和10. (以二进制方式读写时无此问题)
=>">>"的格式化输入。相关头文件<iomanip.h>
操纵符 功能 输入/输出
dec 格式化为十进制数值数据 输入和输出
endl 输出一个换行符并刷新此流 输出
ends 输出一个空字符 输出
hex 格式化为十六进制数值数据 输入和输出
Oct 格式化为八进制数值数据 输入和输出
setprecision(int p) 设置浮点数的精度位数 输出
(2)二进制文件。
ofstream &put(char ch) 写入一个字符。
ifstream &get(char &ch); 读取一个字府;
int get(); 读取返回一个字符,如到达文件尾则返回EOF;
ifstream &get(char *buf,int num,char delim='n');
读入了 num 个字符或遇到了由delim指定的字符
read(unsigned char *buf,int num); 读取数据块。可用gcount()获实际读取字符数;
write(const unsigned char *buf,int num); 写入数据块。
(3)检测文件尾。
成员函数eof()。如 if(in.eof() ) ...
int _tmain(int argc, _TCHAR* argv[]){//写ofstream fout("out1.txt");if (!fout){cout<<"error: open write file out1.txt fail!"<<endl;return 1;}fout<<"write to out1.txt!"<<endl;fout<<"这是第二行, 第二行!"<<endl;int nnn = 10;fout<<nnn<<endl;fout.flush();//清除缓存,立即写到文件fout.close();fout.clear();fout.open("out2.txt", ofstream::out| ofstream::binary);if (!fout){cout<<"error: open write file out2.txt fail!"<<endl;return 1;}string str = "write to out2.txt as binary mode!\n";fout.write(str.c_str(), str.size() );str = "这是第二行, 第二行!";fout.write(str.c_str(), str.size() );fout.flush();fout.close();fout.clear();//读ifstream fin("out1.txt");if (!fin){cout<<"error: open read file out1.txt fail!"<<endl;return 1;}while(!fin.eof() ){string strRead;fin>>strRead;cout<<strRead<<endl;}fin.close();fin.clear();fin.open("out2.txt", ofstream::out|ifstream::binary);if (!fin){cout<<"error: open read file out2.txt fail!"<<endl;return 1;}char line[100];memset(line, 0, 100);fin.getline(line, 100);cout<<line<<endl;while(!fin.eof() ){char bufRead[100] = {0};fin.read(bufRead, 100);cout.write(bufRead, strlen(bufRead) );// string strRead;// fin>>strRead;// cout<<strRead<<endl;}//// ifstream fin1("abc.txt");// if (!fin1)// {cout<<"error: open read file abc.txt fail!"<<endl;// return 1;// }return 0;}
4.文件定位。
文件流维护了两个指针:读指针和写指针。
istream &seekg(streamoff offset,seek_dir origin); 定位读指针。
ostream &seekp(streamoff offset,seek_dir origin); 定位写指针。
参数:offset :基于orgin的偏移量(字节)
Orgin :基准位置。可取 ios::beg 文件头, ios::cur 当前位置, ios::end 文件尾。
5.流对象的传递。
Stream基类的赋值构造函数声明为非public,所以作为函数参数时使用引用或者指针传递,而非值传递。
例如: void fn(stream in);//错
void fn(stream& in); //正确
6常用情况记录
(1)检测文件是否存在但不创建。
以写入模式打开文件时,文件不存在则会创建。只以读取模式打开时,文件不存在并不会创建,只是流出错。
代码:Ifstream fin("in.txt"); if(! fin) cout<<"打开文件in.txt失败";
(2)以空格或换行符为结束符输入。 “>>”操作符
(3)以换行符为结束符输入。 getline();
(4)以文件尾为结束符输入。 read();
(5)以指定字符作为结束符输入。 Get(char*s, streamsize n, char delim);
- 【C/C++】C++文件流
- 【C/C++】文件流操作
- C 文件流
- C文件流
- c语言文件流
- C读取文件流
- 【C++】 文件输出流
- C++:文件流读写
- C文件流
- C文件输入输出流
- C++IO文件流
- C语言中的文件流
- C语言中的文件流
- C流式文件操作
- C语言的文件流
- C语言中的文件流
- C#FileStream文件流(字符)
- C++(文件和流)
- 个无法解析的外部命令
- ALSA中amixer的用法
- Android中关于数据存储的方式--文件存储
- sql 查询时间的匹配
- jquery记录
- C++文件流
- sqlserver2008编辑前200行“打开表”
- C++多态性基本概念 包括虚函数和纯虚函数
- mips下的pppoe驱动
- 黑马程序员关于Ado。Net的一些总结
- 存储过程入门与提高
- Qt创建窗体下拉框并改变窗体颜色
- linux查询网址
- 如何判断程序是否第一次运行