快生活 - 生活常识大全

入门到理解之文件操作文本文件的读写二


  原文地址http://www.javayihao.top/detail/168
  一:概述
  1.程序在运行中产生的数据都是临时数据,程序一旦运行结束会被释放,可以通过文件相关的操作将数据持久保存。
  2.文件类型有文本文件(文件以文本的ASCLL码形式存储在计算机中)和二进制文件(文件以文本的二进制形式存储在计算机中,用户一般直接读不懂他们)。
  3.C++中对文件操作需要包含头文件<fstream>,涉及到的三大文件操作类:ofstream写操作类;ifstream读操作类;fstream读写操作类。</fstream>
  二:文本文件读写操作
  写文件
  第1步:包含头文件#include<fstream></fstream>
  第2步:创建流对象ofstream ofs
  第3步:打开文件ofs.open("文件路径",打开方式)
  第4步:写文件ofs&lt;&lt;"写入数据"
  第5步:关闭文件ofs.close()
  注意:
  1.文件的打开方式
  2.打开方式可以通过|操作符配合使用,如打开二进制写文件 ios::binary|ios:out
  3.创建流对象ofstream也可以选择fstream读写类
  案例代码
  #include<iostream></iostream>
  using namespace std;
  //第1步
  #include<fstream>int main() {</fstream>
  //第2步 ofstream ofs;
  //第3步 当前同级目录生成test文件
  ofs.open("test.txt",ios::app);
  //第4步
  ofs &lt;&lt; "helloword";
  //第5步
  ofs.close();
  }
  读文件
  第1步:包含头文件#include<fstream></fstream>
  第2步:创建流对象ifstream ifs
  第3步:打开文件ifs.open("文件路径",打开方式)判断是否打开成功,打开方式和上面写文件一样
  第4步:读数据
  第5步:关闭文件ifs.close()
  案例代码
  #include<iostream></iostream>
  using namespace std;
  //第1步
  #include<fstream></fstream>
  void test() {
  //第2步
  ifstream ifs;
  //第3步
  ifs.open("test.txt", ios::in); if (!ifs.is_open()) {
  cout &lt;&lt; "文件打开失败"; return;
  }
  //第4步
  char buf[1024] = { 0 };
  //字符数组初始化为0
  while (ifs &gt;&gt; buf) {
  //循环全部读完
  cout &lt;&lt; buf &lt;&lt; endl; }
  //第5步
  ifs.close();}
  int main() {
  test();}
  注意:第4步读数据方式有四种。其他三种如下
  //第二种
  char buf[1024] = { 0 };
  while (ifs.getline(buf,sizeof(buf))){//一行一行读取
  cout &lt;&lt; buf &lt;&lt; endl;
  }
  //第三种
  #include<iostream></iostream>
  #include<string></string>
  using namespace std;
  //第1步
  #include<fstream>void test() {</fstream>
  //第2步
  ifstream ifs;
  //第3步
  ifs.open("test.txt", ios::in);
  if (!ifs.is_open()) { cout &lt;&lt; "文件打开失败"; return;
  }
  //第4步
  string buf;
  while (getline(ifs,buf)){
  //使用string中的全局函数getline一行行读取,需要导入string头文件
  cout &lt;&lt; buf &lt;&lt; endl; }
  //第5步
  ifs.close();}
  int main() {
  test();}
  //第四种
  #include<iostream></iostream>
  using namespace std;
  //第1步
  #include<fstream></fstream>
  void test() {
  //第2步
  ifstream ifs;
  //第3步
  ifs.open("test.txt", ios::in);
  if (!ifs.is_open()) {
  cout &lt;&lt; "文件打开失败"; return;
  }
  //第4步
  char c;
  while ((c=ifs.get())!=EOF){//一个一个字符读取、效率不高
  cout &lt;&lt; c; }
  //第5步
  ifs.close();}
  int main() {
  test();}
  三:二进制文件读写操作
  1.二进制方式对文件操作,打开方式指定为ios::binary,二进制文件不仅可以对内置数据类型的数据操作,还可以对对象类型操作。
  2.写入的二进制文件出现乱码不用处理,只要读到的正确即可
  写文件
  #include<iostream>using namespace std;</iostream>
  //第1步 头文件
  #include<fstream></fstream>
  class person {
  public:
  char name[54];//涉及到字符串读写,不要使用c++的string,而是用c的char
  int age;};
  void test() {
  //第2步 流对象
  ofstream ofs;
  //第3步 打开文件
  ofs.open("test.txt", ios::out|ios::binary);
  //第4步写文件
  person p = { "李四",12 };
  ofs.write((const char *)&amp;p,sizeof(p));
  //第5步关闭
  ofs.close();}
  int main() {
  test();}
  读文件
  #include<iostream></iostream>
  using namespace std;
  //第1步
  #include<fstream></fstream>
  class person {
  public:
  char name[54];
  int age;
  };
  void test() {
  //第2步
  ifstream ifs;
  //第3步
  ifs.open("test.txt", ios::in|ios::binary);
  if (!ifs.is_open()) {
  cout &lt;&lt; "文件读取失败"; return; }
  //第4步
  person p ;
  ifs.read((char *)&amp;p,sizeof(p));
  cout &lt;&lt; p.name &lt;&lt; p.age;
  //第5步
  ifs.close();}
  int main() {
  test();}
网站目录投稿:迎天