c ++에 .Bin 파일을 생성하는 함수가 있습니까? 아니면이 코드가 뭔가 누락 되었습니까?
-
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();
}
한 가지 옵션은 읽기/쓰기를 위해 열리고 파일의 시작 부분을 찾는 것입니다.
그런 다음 원하는대로 읽거나 쓰거나 할 수 있습니다.
제휴하지 않습니다 StackOverflow