文件的读写

1.二进制文件写:将学生的信息写进students.dat二进制文件中

#include <iostream>
#include <fstream>
using namespace std;
class CStudent{
public:
    char szName[20];
    int nScore;
};
int main(){
    CStudent s;
    ofstream OutFile("C:\\students.dat",ios::out | ios::binary);
    while(cin>>s.szName>>s.nScore)
    {
        if(stricmp(s.szName,"exit")==0)  //当名字为exit时结束输入
            break;
        OutFile.write((char*)&s,sizeof(s));  //以类s的大小写进文件OutFile
    }
    OutFile.close();
    return 0;
}

2.二进制文件的读:

#include <iostream>
#include <fstream>
using namespace std;
class CStudent{
public:
    char szName[20];
    int nScore;
};
int main(){
    CStudent s;
    ifstream inFile("C:\\students.dat",ios::in | ios::binary);
    if(!inFile)
    {
        cout<<"File open error"<<endl;
        return 0;
    }
    while(inFile.read((char*)&s,sizeof(s)))
    {
        int nReadedBytes=inFile.gcount();  //统计一共读了多少个字节
        cout<<s.szName<<"\t"<<s.nScore<<"\t"<<nReadedBytes<<endl;
    }
    inFile.close();
    return 0;
}

执行效果:



3.二进制文件的定位,将students.dat中第三个学生换成Mike

#include <iostream>
#include <fstream>
using namespace std;
class CStudent{
public:
    char szName[20];
    int nScore;
};
int main(){
    CStudent s;
    fstream ioFile("C:\\students.dat",ios::in | ios::out |ios::binary);
    if(!ioFile)
    {
        cout<<"File open error"<<endl;
        return 0;
    }

    ioFile.seekp(2*sizeof(s),ios::beg); //定位写指针到第三个记录
    ioFile.write("Mike",strlen("Mike")+1);
    ioFile.seekg(0,ios::beg);  //定位读指针到文件开头
    while(ioFile.read((char*)&s,sizeof(s)))
    {
        int nReadedBytes=ioFile.gcount();  //统计一共读了多少个字节
        cout<<s.szName<<"\t"<<s.nScore<<"\t"<<nReadedBytes<<endl;
    }
    ioFile.close();
    return 0;
}

执行效果:



4.将源文件src.dat中的数据逐个(字符)复制到目的文件dest.dat中:

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc,char* argv[]){
    if(argc != 3)
    {
        cout<<"Arguments missing!"<<endl;
        return 0;
    }
    ifstream InFile(argv[1],ios::in | ios::binary);  //第二个命令行参数指定读文件
    if(!InFile)  //判断读文件是否打开成功
    {
        cout<<"Source file open error!"<<endl;
        return 0;
    }

    ofstream OutFile(argv[2],ios::out | ios::binary);  //第三个参数指定写文件
    if(!OutFile)  //判断写文件是否打开成功
    {
        cout<<"Destination file open error!"<<endl;
        return 0;
    }

    char c;
    while(InFile.get(c))  //每次读取一个字符
    {
        OutFile.put(c);  //每次写入一个字符
    }
    OutFile.close();
    InFile.close();
    return 0;
}

打开命令行窗口,输入如下指令即可:


来自北京大学MOOC课件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值