감사합니다.
박지훈.임프 님이 쓰신 글 :
: 상식적인 문제인데요... 구조체의 크기가 가변적이라면 FileStream->Read로 한번에 읽어올 방법이 없지요. Read의 두번째 인자가 읽어올 전체 크기니까요.
:
: 구조체의 전체 크기가 가변적일 수밖에 없는 경우라면 각 멤버들을 따로따로 읽고 쓰고 해야 합니다. 그게 싫다면 sExt를 문자 배열로 만들고 크기를 충분히!크게 잡아놓는 수밖에 없습니다. 이건 기술적인 문제가 아니라 당연한 논리의 문제죠.
:
:
: 축구 님이 쓰신 글 :
: : 흐 그렇군요 근데 배열크기가 변해서 배열을 직접적으로 써줄 수가 없는데 어떻게 해야하져?
: :
: : 저렇게 해놓고
: : sExt = new char[크키가변하는 변수]; 이렇게 사용했는데
: :
: : 박지훈.임프 님이 쓰신 글 :
: : : 역시 멤버에 문제가 있네요. char *sExt 이 멤버는 스트링 자체가 아니라 스트링이 있는 메모리 위치를 가리키는 그냥 포인터일 뿐이기 때문에, 이 구조체를 그대로 파일스트림에 쓰면 4바이트 주소만을 쓸 뿐이죠(물론 32비트일 경우). 이 멤버가 제대로 기록되려면 char 배열을 쓰든지, 아니면 구조체를 통째로 써넣는 대신 멤버별로 각각 써넣든지 해야 하겠지요.
: : :
: : :
: : : 축구 님이 쓰신 글 :
: : : :
: : : : class t_FileInfo
: : : : {
: : : : public :
: : : : char sExtLength;
: : : : char *sExt;
: : : : };
: : : :
: : : : 이렇게 했어요
: : : :
: : : :
: : : : 박지훈.임프 님이 쓰신 글 :
: : : : : 구조체의 내용을 보여주시지요. 구조체 멤버들에 원인이 있을 수도.
: : : : : 예를 들어 구조체 내에 AnsiString이나 UnicodeString이 있다든지요.
: : : : : 아니면 다른 OS에서 쓴 파일을 읽어오는데 바이트 바운더리 얼라인이 다른 경우일 수도 있겠네요.
: : : : :
: : : : :
: : : : : 축구 님이 쓰신 글 :
: : : : : : FileStream으로 읽고 쓰는데요. 이건 깨져서 저장되는데 이건 정상 이잖아요.
: : : : : :
: : : : : : 구조체에 값을 넣고 파일로 저장을 했는데 구조체 크기만큼
: : : : : :
: : : : : : 근데 읽어올때 구조체 만큼 읽어오는데 왜 엉뚱한 값이 들어올까요.
: : : : : :
: : : : : : pLoadFileStream->Read(&tFileInfo, sizeof(t_FileInfo));
|