C++ 使用write()复制二进制文件时,复制文件的大小会增加 #包括 #包括 #包括 班级简介 { public:char*copyBytes; }p; void main() { 无符号整数大小; fstream文件(“file.mp3”,ios::binary | ios::in | ios::out); fstream copy(“copy.mp3”,ios::binary | ios::in | ios::out); seekg(0,ios::end); size=file.tellg(); 文件.seekg(0); 而(!file.eof()) { p、 copyBytes=(字符*)malloc(大小); file.read((char*)p.copyBytes,大小); copy.write((char*)p.copyBytes,大小); 免费(p.copyBytes); } file.close(); }
此程序复制二进制文件file.mp3。原始二进制文件(file.mp3)为2.13 MB,复制的文件(copy.mp3)为2.14 MB。为什么?C++ 使用write()复制二进制文件时,复制文件的大小会增加 #包括 #包括 #包括 班级简介 { public:char*copyBytes; }p; void main() { 无符号整数大小; fstream文件(“file.mp3”,ios::binary | ios::in | ios::out); fstream copy(“copy.mp3”,ios::binary | ios::in | ios::out); seekg(0,ios::end); size=file.tellg(); 文件.seekg(0); 而(!file.eof()) { p、 copyBytes=(字符*)malloc(大小); file.read((char*)p.copyBytes,大小); copy.write((char*)p.copyBytes,大小); 免费(p.copyBytes); } file.close(); },c++,binaryfiles,C++,Binaryfiles,此程序复制二进制文件file.mp3。原始二进制文件(file.mp3)为2.13 MB,复制的文件(copy.mp3)为2.14 MB。为什么? 当(!file.eof())时,您永远不希望使用类似于的循环。相反,检查读取操作是否成功,例如: #include<fstream.h> #include<conio.h> #include<alloc.h> class profile { public: char *copyBytes; }p; voi
的循环。相反,检查读取操作是否成功,例如:
#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();
}
eof标志可能仅由下一次读取操作设置,因此在读取之前检查它是没有帮助的
read
可能只读取缓冲区的一部分。使用file.gcount()
查看读取了多少字节的循环。相反,检查读取操作是否成功,例如:
#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();
}
eof标志可能仅由下一次读取操作设置,因此在读取之前检查它是没有帮助的
read
可能只读取缓冲区的一部分。使用file.gcount()
查看读取了多少字节