바이너리 파일 읽기 및 쓰기
바이너리 파일 읽기 및 쓰기에는 원시 데이터 작업이 포함되며, 주로 다양한 유형의 데이터를 나타내는 바이너리 코드로 구성됩니다. . 일반적인 작업 중 하나는 바이너리 파일의 데이터를 버퍼로 읽어온 다음 이를 다른 파일에 쓰는 것입니다.
문제:
바이너리 파일을 읽고 쓰려고 할 때 다음 코드를 사용하여 파일을 저장하면 파일의 첫 번째 줄에서 몇 개의 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 스트림 사용:
이 방법은 C 표준에서 제공하는 ifstream 및 ofstream 클래스를 사용하는 것입니다. 도서관. 효율적이고 이식 가능한 파일 처리가 가능합니다.
#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<unsigned char> buffer(std::istreambuf_iterator<char>(input), {}); }
위 내용은 내 바이너리 파일이 부분적으로만 복사되는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!