天天睡大觉

 

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/

 

posted on 2020-12-15 15:44  天天睡大觉  阅读(262)  评论(0编辑  收藏  举报

导航