#include<fstream.h>
#include<conio.h>
#include<alloc.h>
class profile
{
public: char *copyBytes;
}p;
void main()
{
unsigned int size;
fstream file ("file.mp3", ios::binary | ios::in | ios::out);
fstream copy ("copy.mp3", ios::binary | ios::in | ios::out);
file.seekg(0, ios::end);
size=file.tellg();
file.seekg(0);
while(!file.eof())
{
p.copyBytes=(char*)malloc(size);
file.read((char*)p.copyBytes, size);
copy.write((char*)p.copyBytes, size);
free(p.copyBytes);
}
file.close();
}
Run Code Online (Sandbox Code Playgroud)
该程序制作二进制文件file.mp3的副本.原始二进制文件(file.mp3)为2.13 MB,复制的文件(copy.mp3)为2.14 MB.为什么?
你永远不想使用看起来像的循环while (!file.eof()).相反,检查读取操作是否成功,例如:
while (file.read(....))
Run Code Online (Sandbox Code Playgroud)
eof标志可能只能由下一个读操作设置,因此在读取之前检查它是没有用的.
您始终将完整缓冲区写入输出文件,但read可能只读取缓冲区的一部分.使用file.gcount()看到了多少字节读取.
请注意,缓冲区大小不需要与文件大小相同 - 这对于不适合内存的文件不起作用.您可以简单地使用恒定大小的缓冲区.循环将负责复制整个文件.
| 归档时间: |
|
| 查看次数: |
1027 次 |
| 最近记录: |