c ++에 .Bin 파일을 생성하는 함수가 있습니까? 아니면이 코드가 뭔가 누락 되었습니까?

StackOverflow https://stackoverflow.com/questions/908555

  •  05-09-2019
  •  | 
  •  

문제

다음과 같이 보이는 코드가 있습니다.

int main () {
  fstream file;
  file.open("test.bin", ios::out | ios::binary);
  if(!file.is_open())
  {
      return -1;
  }
  int n = 3;
  file.write(reinterpret_cast<char*>(&n), sizeof(n));
  file.close();
  return 0;
}

혼자서 실행하면 -1로 종료되므로 분명히 "Test.bin"을 열지 못했습니다. 그러나 빈 메모장 파일을 "test.bin"으로 저장하고 실행하면 잘 작동합니다. 궁금한 점은 "test.bin"이라는 파일이 아직 존재하지 않는 경우 C ++ 프로그램이 빈 파일 "test.bin"을 자동으로 생성 할 수있는 방법입니다.

도움이 되었습니까?

해결책

코드 스 니펫은 입력을 위해 열린 파일에 쓰려고하기 때문에 잘못되었습니다. 파일에 쓰고 싶다면 간단히 사용하십시오. ios::out 대신에 ios::in.

읽기를 위해 파일을 열고 싶지만 존재하지 않으면 작성하려면 다음을 사용할 수 있습니다.

file.open("test.bin", ios::in | ios::binary);
if(!file.is_open()) {
    file.open("test.bin", ios::out | ios::binary);
    int n = 3;
    file.write(reinterpret_cast<char*>(&n), sizeof(n));
    file.close();
    file.open("test.bin", ios::in | ios::binary);
    if(!file.is_open()) {
        return -1;
    }
}

이렇게하면 아직 존재하지 않는 경우 정수 3을 기본 내용으로 파일을 초기화합니다.

존재한다면 내용물을 단독으로 남겨 둡니다. 두 경우 모두 첫 바이트에서 파일을 열게됩니다.

다른 팁

파일을 열고 닫아서 할 수 있다고 생각합니다.

if (GetFileAttributes("test.bin") == INVALID_FILE_ATTRIBUTES)
{
    fstream file;
    file.open("test.bin", ios::out);
    file.close();
}

한 가지 옵션은 읽기/쓰기를 위해 열리고 파일의 시작 부분을 찾는 것입니다.

그런 다음 원하는대로 읽거나 쓰거나 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top