STL文件读写基础
来源:互联网 发布:小黑屋写作mac 编辑:程序博客网 时间:2024/05/22 02:28
STL文件读写基础
stl中对文件读写的函数在头文件fstream中定义,它的基本对象模型如下:
其中包含三个对象ifstrea、ofstream和fstream,分别对文件提供只读、只写、读写功能,从其对象继承关系也可以看出这一点。下面就简单的介绍下基本的文件方法
打开文件
打开文件一般有两种方式:
1、在构造函数中打开
ifstream input("r:\\3.txt",ios::in | ios::binary);
2、通过open函数打开
ofstream output;
output.open("r:\\3.txt",ios::out |ios::binary);
不管用哪种方式,都需要传入两个参数:第一个参数是文件名,第二个参数是打开选项,常见的选项有:in、out、app(append)、binary等。第二个参数也可以不传,此时,对于ifstream,就是以读方式打开、ofstream以写方式打开。
检查是否打开成功
可以通过good函数检查文件是否打开成功:
if (!input.good())
{
cout << "file open fail" << endl;
return 1;
}
这个good函数也可以去掉,直接检查steam是否为真(这样可读性不好,不建议,但许多历史代码喜欢这么写,还是应该学习一下)。
if (!input)
{
cout << "file open fail" << endl;
return 1;
}
定位和获取当前位置
有的时候,我们需要对文件进行随机访问,如连接两个文件的时候就要定位到文件的末尾。在stl中可以通过stream对象的seekg实现这一功能。与之相对的就是获取当前位置,函数为tellg,如下代码演示了利用这两个函数获取文件长度。
input.seekg (0,ios::end);
int length = input.tellg();
tellg函数比较简单,没有参数,直接返回当前位置。而seekg有两个参数:第一个参数是偏移量,可以为负数;第二个参数则是相对位置,可以选取ios::beg(begin)、ios::end(end)、ios::cur(current)三个值,这个参数可以省略,省略的时候是取的ios::beg,从文件头定位。
关闭文件
关闭文件有两个方法:
- 调用close方法显式关闭
- 对象删除的时候隐式关闭
具体使用哪个这个看个人喜好了,就我个人而言,我一般喜欢在构造函数中打开文件,不习惯调用open函数,因此也比较倾向于隐式关闭,不调用close函数。
读写文件
下面我们就以一个文件拷贝为例简单的介绍下读写的方式:
1、传统的缓冲区读写
char buf[1024];
while(!input.eof())
{
int count = sizeof(buf);
input.read(buf, count);
output.write(buf, count);
}
std::string strSrcFile = "aaa";std::string strDstFile = "bbb";std::streamsize ssCount = 0;char szBuf[8192];std::ifstream copySrc;std::ofstream copyDst;copySrc.open(strSrcFile.c_str(), std::ios::in | std::ios::binary);copyDst.open(strDstFile.c_str(), std::ios::out | std::ios::binary);while(!copySrc.eof()){ssCount = sizeof(szBuf);memset(szBuf, 0, sizeof(szBuf));//copySrc.read(szBuf, ssCount);//ssCount = copySrc.gcount();ssCount = copySrc.read(szBuf, ssCount).gcount();copyDst.write(szBuf, ssCount);}copySrc.close();copyDst.close();
这里主要用到了三个函数:read函数为读,write函数写,eof检查是否读取到了文件结尾。
2、利用string逐行读写
string line;
while(std::getline(input, line))
output << line << endl ;
这里用了getline行数从流里每次读写一行,用 << 运算符将内容写入流,不过这种方式仅仅适合读写文本文件。
3、流方式读写
output<< input.rdbuf();
这个方式非常简单,只用了一行代码就可以实现:用rdbuf函数获取读缓冲区,用 << 运算符在两个流对象之间建立管道。
参数ios_base::openmode用以指定文件的打开方式,可以是如表6-4所示的标志的组合。
表6-4 ios_base::openmode标志
标志
含义
ios::app
追加模式(append),新输出的内容追加在原文件内容的后面
ios::ate
文件打开后定位到文件尾,ios:app就包含此属性
ios::binary
以二进制方式打开文件,默认的方式是文本方式
ios::in
文件以输入方式打开
ios::out
文件以输出方式打开
ios::trunc
截断模式(truncate),如果文件存在,则把文件长度设为0
ios::nocreate
如果文件不存在则不创建
ios::noreplace
如果文件已存在则不替换
相关博客:
http://blog.csdn.net/kingstar158/article/details/6859379
http://book.51cto.com/art/200908/145781.htm
- STL文件读写基础
- STL文件读写基础
- 文件读写基础
- Python文件读写基础
- C++基础:文件读写
- Java基础 文件读写
- Python 基础 读写文件
- STL之文件读写类fstream
- MFC + STL完成文件一次读写一行
- [Android基础]文件读写操作
- iOS基础之文件读写
- python基础:读写文件和合并文件
- Windows窗体编程基础学习:文件读写
- java基础 字符文件的读写
- Java语言基础之文件读写
- QT基础(七)----File文件读写
- java基础学习之文件读写
- 一个基础的文件读写(复习)
- 一些Python的惯用法和小技巧:Pythonic
- Coursera
- 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和
- 最长公共子串(Longest-Common-Substring,LCS)
- VC C/C++ 4种方法获取文件大小 Windows API
- STL文件读写基础
- [leet code] Pascal's Triangle II
- 15分钟学会使用Git和远程代码库
- [LeetCode] 25倍速度被完虐的 Sum3
- 2013年伯乐在线最受欢迎的20篇技术博文
- 一行代码,浏览器变临时编辑器
- C语言:丹尼斯·里奇的不朽遗产
- 分布式系统的数据一致性
- AChartEngine应用之LineChart(模拟三角函数sin,cos)