读取和写入二进制文件

我试图编写代码来读取二进制文件到缓冲区,然后将缓冲区写入另一个文件。 我有下面的代码,但缓冲区只存储了文件中第一行的几个ASCII字符,没有别的。

int length; char * buffer; ifstream is; is.open ("C:\\Final.gif", ios::binary ); // get length of file: is.seekg (0, ios::end); length = is.tellg(); is.seekg (0, ios::beg); // allocate memory: buffer = new char [length]; // read data as a block: is.read (buffer,length); is.close(); FILE *pFile; pFile = fopen ("C:\\myfile.gif", "w"); fwrite (buffer , 1 , sizeof(buffer) , pFile ); 

如果你想这样做的C + +的方式,这样做:

 #include <fstream> #include <iterator> #include <algorithm> int main() { std::ifstream input( "C:\\Final.gif", std::ios::binary ); std::ofstream output( "C:\\myfile.gif", std::ios::binary ); std::copy( std::istreambuf_iterator<char>(input), std::istreambuf_iterator<char>( ), std::ostreambuf_iterator<char>(output)); } 

如果您需要缓冲区中的数据来修改它,请执行以下操作:

 #include <fstream> #include <iterator> #include <vector> int main() { std::ifstream input( "C:\\Final.gif", std::ios::binary ); // copies all data into buffer std::vector<char> buffer(( std::istreambuf_iterator<char>(input)), (std::istreambuf_iterator<char>())); } 
  sizeof(buffer) == sizeof(char*) 

改用长度。

另外,最好使用fopen与“ wb ”….

这里是一个简短的例子,使用rdbuf的C ++方法。 我从网上得到这个。 我无法find我的原始来源:

 #include <fstream> #include <iostream> int main () { std::ifstream f1 ("C:\\me.txt",std::fstream::binary); std::ofstream f2 ("C:\\me2.doc",std::fstream::trunc|std::fstream::binary); f2<<f1.rdbuf(); return 0; } 

sizeof(buffer)是最后一行指针的大小,而不是缓冲区的实际大小。 您需要使用您已经build立的“长度”

你应该把长度传递给fwrite而不是sizeof(buffer)。

我真的不明白,为什么有人会select编写这样一个复杂的代码时,可以发生这样一个简单的命令在下面的代码片段。

复制任何大小的整个文件。 没有大小的限制!

只要使用这个。 testing和工作!

 #include<iostream> #include<fstream> using namespace std; int main() { ifstream infile; infile.open("source.pdf",ios::binary|ios::in); ofstream outfile; outfile.open("temppdf.pdf",ios::binary|ios::out); int buffer[2]; while(infile.read((char *)&buffer,sizeof(buffer))) { outfile.write((char *)&buffer,sizeof(buffer)); } infile.close(); outfile.close(); return 0; } 

具有较小的缓冲区大小将有助于复制小文件。 即使是“char buffer [2]”也能完成这项工作。