> 백엔드 개발 > C++ > 내 바이너리 파일이 부분적으로만 복사되는 이유는 무엇이며 어떻게 해결할 수 있습니까?

내 바이너리 파일이 부분적으로만 복사되는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-14 00:06:11
원래의
405명이 탐색했습니다.

Why Does My Binary File Copy Only Partially, and How Can I Fix It?

바이너리 파일 읽기 및 쓰기

바이너리 파일 읽기 및 쓰기에는 원시 데이터 작업이 포함되며, 주로 다양한 유형의 데이터를 나타내는 바이너리 코드로 구성됩니다. . 일반적인 작업 중 하나는 바이너리 파일의 데이터를 버퍼로 읽어온 다음 이를 다른 파일에 쓰는 것입니다.

문제:

바이너리 파일을 읽고 쓰려고 할 때 다음 코드를 사용하여 파일을 저장하면 파일의 첫 번째 줄에서 몇 개의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿