1
二进制文件与输入输出-例题
复制MP3二进制文件
2
1.题目内容与要求
复制一个MP3二进制文件到另一个文件中。
3
2. 算法分析
①输入原始文件和目标文件名;
②分别按照读方式打开原始文件,按照写方式打开目
标文件;
③循环每次读取原始文件256字节,如果文件结尾则
转⑤;
④将实际读取的字节写入目标文件之中,转③ ;
⑤关闭原始文件和目标文件。
4
3.编程指导
二进制文件打开方式为:ios::binary
ofstream fout(szDestFile, ios::binary); // 写打开
ifstream fin(szOrigFile, ios::binary); // 读打开
定位文件开始:fin.seekg(0L,ios::beg);
读文件内容:fin.read(szBuf, sizeof(char) * 256)
实际读文件的内容长度:int length=fin.gcount();
写文件内容:fout.write(szBuf, length);
读写文件过程中错误判断:if (fout.bad())
文件结尾判断:while(!fin.eof())
关闭文件对象:fout.close(); // 关闭目标文件
fin.close(); // 关闭原始文件
5
4.二进制文件复制模块程序代码 (1)
bool mp3cpy(const char * szDestFile, const char * szOrigFile){
ofstream fout(szDestFile, ios::binary); // 以二进制方式打开目标文件
ifstream fin(szOrigFile, ios::binary); // 以二进制方式打开原始文件
bool bRet = true;
if (fin.bad()){ // 原始文件出错
bRet = false;
}
6
二进制文件复制模块程序代码 (2)
else{
fin.seekg(0L,ios::beg); // 定位原始文件开始处
while(!fin.eof()){ // 原始文件未结尾
char szBuf[256] = {0};
fin.read(szBuf, sizeof(char) * 256); // 每次读取原始文件最多256字节
int length=fin.gcount(); // 实际读取的字节数
if (fout.bad()){ // 目标文件出错
bRet = false;
break;
}
fout.write(szBuf, length); // 每次写入目标文件length个字节
}
}