2010-02-18 4 views
0

파일을 프로그램에 임베드하고 싶습니다. 제공되지 않는 경우 기본 구성 파일에 사용됩니다. 나는 단지 기본값을 사용할 수 있다는 것을 깨달았지만 파일을 추출하여 디스크에 저장하여 수정할 수 있도록하려고합니다.프로그램에 파일 임베드

+0

당신에게 중복이 발견되었습니다 : http://stackoverflow.com/questions/1074362/embedded-resource-in-c C++의 다른 컨텍스트에서 "리소스"와 "관리"를 사용하기 때문에 검색이 어려워집니다. 하지만 난 리눅스와 맥 질문을 본 것 같아요 ... – dmckee

+0

linux dup : http://stackoverflow.com/questions/72616/embed-data-in-ac-program (초기 시퀀스 번호도) – dmckee

+0

당신은 완전히 그것을 스스로하고 싶어합니다. 이것은 도서관 및/또는 운영 체제에 특정한 것입니다. 당신이 그것을하고 싶은 환경을 추가하십시오. –

답변

-2

파일을 프로세스 메모리에 매핑하는 유닉스의 경우는 mmap(2)입니다. Windows에는 유사한 것이있다 그러나 나는 결코 그것으로 놀지 않았다.

+2

여기에 올바른 질문에 답한 것 같지 않습니다 ... – dmckee

+0

왼쪽의 것들에 대답하고 있습니다 :) –

3

임베딩함으로써 파일없이 프로그램을 배포한다는 의미입니까?

그런 다음 빌드 도구 모음의 구성 초기화 코드로 변환 할 수 있습니다. makefile 단계 (또는 사용중인 도구) -이 .cfg 파일을 구성 데이터 구조를 초기화하는 일부 C++ 코드 파일로 변환하는 스크립트를 추가하십시오. 그렇게하면 .cfg 파일을 수정하고 프로젝트를 다시 빌드 한 다음 새 값을 내부에 반영 할 수 있습니다.

그런데 Windows에서는 resource file에 데이터를 삽입 할 수 있습니다.

+0

제가 정말로하려고하는 것은 내 프로그램에서 유효한 파일 (예 : .png 파일)을 엔진에서 생성 할 수있게하십시오. 그런 다음 zip 파일과 같은 종류의 디스크에 이러한 파일을 생성 할 수 있기를 원합니다. – Jeff

2

임베디드 데이터는 종종 "리소스"라고합니다. C++은 기본 지원을 제공하지 않지만 거의 모든 실행 파일 형식으로 관리 할 수 ​​있습니다. C++ 용 리소스 관리자를 찾으십시오.

2

당신이 할 수있는 흔한 것은 정적 바이트의 배열로 파일 데이터를 표현하는 것입니다

그런 다음
// In a header file: 
extern const char file_data[]; 
extern const size_t file_data_size; 

// In a source file: 
const char file_data[] = {0x41, 0x42, ... }; // etc. 
const size_t file_data_size = sizeof(file_data); 

파일 데이터는 당신이 참조 할 수있는 실행 파일로 컴파일 된 바이트의 전역 배열 될 것입니다 어딘가에. 원시 바이트 배열을 처리 할 수 ​​있도록 파일 처리 코드를 다시 작성하거나 fmemopen(3)과 같은 것을 사용하여 데이터에서 의사 파일 핸들을 열고이를 파일 처리 코드로 전달해야합니다.

물론이 형식으로 데이터를 가져 오려면 파일을 컴파일러가 수락 할 수있는 바이트 배열로 변환하기 위해 몇 가지 사전 처리 단계를 사용해야합니다. makefile이 좋을 것이다.

+0

데이터 파일을 한 쌍의 C 파일 (헤더 및 본문)로 변환하는 프로그램이 있습니다. 아마도 데이터를 링커 객체 파일에 직접 저장할 수있는 프로그램도있을 수 있지만 분명히 덜 휴대용 해킹입니다. – Steve314

+0

이 솔루션은 작은 파일에서도 작동하지만 Visual Studio에서는 4kb 파일로 거대한 컴파일 시간을 경험했습니다. 또한 Visual Studio 배열을 포함하는 파일을 열면 지연되기 시작 .... – Tara

관련 문제