C++学习日记(文件操作)

在计算机系统中,文件可分为文本文件和二进制文件两大类。
文本文件是以ASCII码方式存储的文件(汉字是以机内码的方式存储的);
二进制文件的内容可以看成是由0和1组成的字符串,计算机中的图片、视频、音频都是以二进制文件的形式来存储的。

I/O流

iostream定义了格式化和非格式化的I/O流相关类
fstream头文件定义了文件处理的方法,进行文件的输入输出时必须包含它
iomanip头文件定义了一些控制流格式且需要参数的计算符

文件打开模式

ios::in 输入方式打开文件
ios::out 输出方式打开文件
ios::app 追加方式
ios::ate 打开文件并将文件指针定位到文件末尾
ios::binary 二进制方式打开文件
ios::trunc 文件存在的情况下将之前的文件长度设为0

打开方式可组合使用
ios::in | ios::out 以读和写的方式打开文件

c++默认打开文件的方式是文本文件方式
若要用二进制文件方式打开的话

ofstream file;
file.open("text.txt",ios::binary);

向文件中写数据(文本文件)

使用“<<”方法,ofstream创建一个可写入数据的文件

//用"<<"向文件中输出数据
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
    ofstream ifile;
    ifile.open("in1.txt");
    if (ifile)
    {
        cout << "ok" << endl;
    }
    ifile << "从零开始学C++";
    ifile.close();
    system("pause");
}

使用put方法写入一个字符

//put使用方法介绍
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
    ofstream ifile;
    ifile.open("in1.txt");
    if (ifile)
    {
        cout << "ok" << endl;
    }
    /*ifile.put('B');*/   //向文件中输入单个字符
    ifile << "A";   //以标准输出方式向文件中输出内容
    ifile.close();
    system("pause");
}

从文件中读数据(文本文件)

ifstream打开一个文件

  • get()方法从文件中获取单个字符信息知道文件末尾

输出get中获得的字符即可读出文件中的数据

//get()方法使用
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    ifstream infile("in1.txt");
    char mychar;
    if (!infile.good())
    {
        cout << "打开文件失败" << endl;
        cin.get();
        return 0;
    }
    while (infile.get(mychar)) //按每个字符的顺序读取文件
    {
        cout << mychar;
    }
    cout << endl;
    cin.get();
    return 0;
}
  • getline()方法是获取文件了一行信息内容,直到文件结束或人为地结束文件读取功能为止。
//getline()方法使用
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    ifstream infile("in1.txt",ios::out);
    const int size = 256;
    char buf[size]; //字符缓冲区用来保存每行的文件内容
    if (infile.fail())
    {
        cout << "打开文件失败" << endl;
        cin.get();
        return 0;
    }
    while (infile.getline(buf,size)) //按行读取文件
    {
        cout << buf << endl;
    }
    cout << endl;
    cin.get();
    return 0;
}
  • rdbuf()方法能更便捷的输出文本中的内容

不用循环语句

//getline()方法使用
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    ifstream infile("in1.txt", ios::out);
    if (infile.fail())
    {
        cout << "打开文件失败" << endl;
        cin.get();
        return 0;
    }
    cout << infile.rdbuf();
    cout << endl;
    cin.get();
    return 0;
}

二进制文件的读和写

  • 二进制文件写入方法
ostream &write(const char *buffer, streamsize num);

write方法的功能是将缓冲区buffer中的字符串信息输入到输出流中去。
num是输出到输出流中字符的长度。

//二进制文件write方法的使用
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
void main()
{
    ofstream ifile;
    char *strbuff = "从零开始学C++"; //定义一个字符串信息
    ifile.open("in.txt", ios::binary);
    if (ifile)
    {
        cout << "ok" << endl;
    }
    ifile.write(strbuff, strlen(strbuff));
    ifile.close();
    system("pause");
}
  • 二进制文件读取方法
istream &read(char *buffer,streamsize num);

函数read()用于输入流,在将字符放入buffer之前从流中读取num个字节。碰到EOF,就停止读取字符信息,丢弃已经读取的字符信息。

//read()函数用法
#include<iostream>
#include<fstream>
using namespace std;
#define size 100
int main()
{
    ifstream infile("in1.txt", ios::binary);
    char buff[size];
    if (infile.fail())
    {
        cout << "打开文件失败" << endl;
        return 0;
    }
    while (!infile.eof())
    {
        infile.read(buff, size);
        cout << buff;
    }
    cout << endl;
    cin.get();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/michaelzzk/article/details/80341704