C++文件读写

头文件:#include <fstream>

C++文件读写主要通过三个类创建文件对象进行操作:ofstream,ifstream,fstream;

文件读写流程:

1.包含头文件:#include <fstream>;

2.通过类创建文件对象与要进行读写的文件建立连接;

  1)创建fstream文件对象,并通过open函数与目标文件建立连接

    open() 成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。

模式标志描述
ios::app 追加模式。所有写入都追加到文件末尾。
ios::ate 文件打开后定位到文件末尾。
ios::in 打开文件用于读取。
ios::out 打开文件用于写入。
ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。
  fstream out;  
  out.open("Hello.txt", ios::out|ios::binary);//模式参数可以由多个组合,中间用|隔开

  2) 通过ofstream,ifstream和fstream创建文件对象,并通过默认构造函数建立与目标文件的连接

  ifstream in("in.txt");//ifstream的默认模式参数:ios::in
  ofstream out("in.txt");//ofstream的默认模式参数:ios::out |ios::trunc
  fstream io("io.txt");//fstream的默认模式参数:ios::in|ios::out

需要注意的是:只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。如果函数被调用时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。

       ifstream无法进行写操作,ofstream无法进行读操作;

3.通过文件对象的方法进行读写操作:

  读操作: >> , get( ),getline( ), read( );

  string s;
  in>>s;//>>读取操作与标准cout>>读取基本一样

  char ch='a';
  in.get(ch);//get每次只读取一个字符,包括空格,换行都可以读取


  char arr[20];
  in.getline(arr,100);//每次读取一行,遇到换行符结束,第一个参数为存到内存的首地址,第二个参数为最大读取字节,当满了最大读取字节就会结束读取;

  char buf[20];
  in.read(buf,20);//第一个参数表示要读到内存的地址,第二个参数表示要读取的字节数;

 

  写操作:<<,put( ), write( );

  string s="hello";
  out<<s;//<<读取操作与标准cout<<读取基本一样

  char ch='a';
  out.put(ch);//put每次只写一个字符

  char buf[10]="wfxqhfn";
  out.write(buf,10);//第一个参数表示要写入文件的内存地址,第二个参数表示要写的字节数;

4.关闭文件;

  io.close();

 

示例:从文件in.txt读入一个字符串并写到out.txt中

 1 #include <fstream>
 2 #include<string>
 3 #include <iostream>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     char str[20];
10     ifstream in("in.txt");
11     ofstream out("out.txt");
12     if(out.fail()||in.fail()){
13         cout<<"打开文件错误!"<<endl;
14 
15     }
16     else{
17         in>>str;
18         out<<str<<endl;
19         out.close();
20         in.close();
21     }
22     return 0;
23 }
View Code

判断文件是否结束的方法

1.使用成员函数eof()可以检测到这个结束符,如果非0表示文件结束;(file.eof()返回值非0表示文件结束;)

2.使用流直接检测,如果为0表示文件结束;(    while(file) {  }  )

3.使用get函数,读取最后一个结束符时,返回0.读取正常情况下,返回1,并把读取的字符放到ch中

 

原文地址:https://www.cnblogs.com/zdl2234/p/10800804.html