C++文件流:fstream
最近想写个简单obj格式的解析程序,要用到文件读取/写入的操作,之前都是用C的标准库来处理,这次想试试C++的标准库函数,网上看了些别人写的博客,感觉有点乱,然后找到这个网站http://www.cplusplus.com/reference/fstream/fstream/,似乎时c++标准库的官方网站,内容非常棒
fstream是iostream的子类:
fstream包含了ifstream和ofstream分别读取流和写入流
官方文档的一个示例:
fstream fs("fname"); if (fs.is_open()) { fs << "lorem ipsum"; std::cout << "Operation successfully performed\n"; fs.close(); } else { std::cout << "Error opening file"; }
打开容易我们关注的是读取其中的内容,这里有几个主要的函数:
1.获取文件大小
方法还是和C的一样
ifs.seekg(0, ifs.end); int length = ifs.tellg(); //文件大小保存在length,单位为字节 ifs.seekg(0, ifs.beg);
2.get()函数
int get(); istream& get (char& c); istream& get (char* s, streamsize n); istream& get (char* s, streamsize n, char delim); istream& get (streambuf& sb); istream& get (streambuf& sb, char delim);
英文的介绍是:Get characters
3.getline()函数
istream& getline (char* s, streamsize n ); istream& getline (char* s, streamsize n, char delim );
参数就是个char数组,n一般填数组大小,delim类似分隔符,比如设置为空格的话,遇到空格就返回,空格后的内容下次调用getline才会读取
4.read()函数
istream& read (char* s, streamsize n);
直接读取n个字节的数据存储到s中,解析txt肯定用这个函数了
官方示例代码:
std::ifstream is ("test.txt", std::ifstream::binary); if (is) { // get length of file: is.seekg (0, is.end); int length = is.tellg(); is.seekg (0, is.beg); char * buffer = new char [length]; std::cout << "Reading " << length << " characters... "; // read data as a block: is.read (buffer,length); //在这里数据处理 delete[] buffer; }
一目了然,C++的文件读取就几个函数而已
更多相关信息在这http://www.cplusplus.com/reference/fstream/fstream/