c++文件I/O

来源:互联网 发布:千方百剂医药软件破解 编辑:程序博客网 时间:2024/05/21 17:18

一、简单的文件输入和输出

#include <iostream>#include <fstream>#include <string>using namespace std;int main(){    //让程序写入文件    //1、创建ofstream 对象    //2、将该对象与对应的文件关联    //3、输出到文件    //4、关闭文件    string filename;    cin>>filename;    //c_str() 返回一个指向字符串的指针    //如果filename是c字符串格式,可以直接传参数    ofstream fout(filename.c_str());    fout<<"This is c ++ io test !\n";    fout.close();    //让程序从文件读取数据    //1、创建一个ifstream对象管理输入流    //2、将该对象与对应的文件绑定    //3、以使用cin的方式,(注意:是方式,不是cin),使用该文件    //4、关闭文件    ifstream fin(filename.c_str());    cout<<"Here are the content of "<<filename<<":\n";    char ch;    while(fin.get(ch))//从文件读取字符        cout<<ch;//输出到屏幕    fin.close();    return 0;}

二、状态检查和is_opne()
较新的c++提供了 检查文件是否被打开的方法 is_open(),可以检查出是否以不合适的文件模式打开失败

三、打开多个文件

1、如果需要同时打开多个文件,则必须为每一个文件创建一个流。

2、如果需要同时打开一组文件,可以只打开一个流。首先创建ifstream对象,然后使用open()方法将流与这个文件关联起来

#include <iostream>#include <fstream>#include <string>using namespace std;int main(int argc,char**argv){    ifstream fin;    char ch;    int total = 0;    for(int i = 0; i<argc; i++)    {        fin.open(argv[i]);        if(!fin.is_open())        {            cerr<<"can't open the file"<<argv[i]<<endl;            fin.clear();            continue;        }        int temp = 0;        while(fin.get(ch))        {            temp++;        }        cout<<total<<" characters in files "<<argv[i]<<endl;        total += temp;        fin.clear();        fin.close();    }    cout<<"Total characters of the file are "<<total<<endl;    return 0;}


四、文件模式

文件模式描述的是文件将被如何使用:读、写、追加等。
在使用流与文件关联时,还是open函数,都可以指定文件模式的第二个参数
ios_base类定义了openmode类型,用于表示模式
常量含义ios_base::in打开文件,便于读取ios_base::out打开文件,以便写入ios_base::ate打开文件,并移到文件尾ios_base::app追加到文件尾ios_base::trunc如果文件存在,则截短文件,即把文件内容长度截短为0,相当于删除文件已有的内容ios_base::binary二进制文件

五、追加文件,即在一个文件的末尾追加数据

#include <iostream>#include <fstream>#include <string>#include <cstdlib>using namespace std;void AddToFile(string filename){    //首先显示已有内容    char ch;    ifstream fin;    fin.open(filename);    if(fin.is_open())    {        while(fin.get(ch))            cout<<ch;        fin.close();    }    //然后追加文档    ofstream fout(filename,ios::out | ios::app);    if(!fout.is_open())    {        cout<<"Can't open file !"<<endl;        exit(EXIT_FAILURE);    }    string content;    while(getline(cin,content) && content.size()>0)    {        fout<<content<<endl;    }    fout.close();}int main(){    const char* filename = "test.txt";    AddToFile(filename);    return 0;}


六、什么是二进制文件,什么是文本文件

  • 文本文件格式是指将所有的内容甚至是数字都存储为文本
  • 二进制格式指的是存储值的计算机内部表示。也就是说,计算机不是存储字符,而是存储这个值的64位double表示
  • 对于字符来说,二进制表示与文本表示是一样的,即都是字符的ASCII码的二进制表示,对于数字来说,二进制表示与文本表示有很大的差别
七、两种模式的对比
  • 文本模式便于读取
  • 二进制文件对于数字来说比较精确,因为它存储的是值的内部表示,因此不会有转换误差和舍入误差
  • 二进制格式保存数据的速度更快,并可以大块的存储数据,占用的空间也比较小
  • 不同平台的二进制存储方式有所不同,即有可能在一个系统上的二进制文件在另一个平台上打不开

八、使用二进制存储数据时,可以使用成员函数 write






0 0