我试图以二进制的方式打开文件movie.avi,并复制到另外一个文件film.avi,于是写了下面的一段代码。问题是,这段代码只对某些文件适用,而无法”完全”复制另外一些文件,也就是说,当源文件并没有读完时却已经提前结束了。我想应该是某一个特殊字节的值导致read认为文件已经读完了,但我是以二进制方式打开的文件呀,这种情况下,文件结束符EOF还有意义吗?puzzling……
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | int main() { char buf[4096]; ofstream out("film.avi" ); ifstream in("movie.avi", ios::binary); // ifstream in("movie.rmvb"); while(1) { in.read(buf, sizeof(buf)); out.write(buf, in.gcount()); if(in.gcount() < sizeof(buf)) break; } in.close(); out.close(); return 0; } |
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
是不是忽略了转义字符,学网络的时候书本有写在eof前面加个esc表示还没结束…
应该不是的,这和串行通信不是一回事。
据说stream 的一些函数本身有BUG
char buf[4096];
ofstream out(“film.avi” );
ifstream in(“movie.avi”, ios::binary);
// ifstream in(“movie.rmvb”);
while(!in.eof())
{
in.read(buf, sizeof(buf));
out.write(buf, in.gcount());
}
in.close();
out.close();