: 안녕하세요.
: VC++에서 serialize(archive)를 썼었는데 그것을 대체할 것을 찾다가
: 구조체를 이용한 파일처리를 구현해 보았습니다.
: 근데 SysData구조체가 잘 말을 안듣는군요. 좀 도와주세요.
: 그리고, 더좋은 방법이 있으면 알려주세요.
: data size는 약2KB(int 500개 정도)입니다.
:
: ==== SysData.cpp 내용 =====
: //----------------------------------------------------------
: #include <vcl.h>
: #pragma hdrstop
:
: #include "SysData.h"
:
: //----------------------------------------------------------
: #pragma package(smart_init)
: BOOL LoadData(void)
: {
: int iFileHandle = FileOpen("SysData.txt", fmOpenRead);
: if(iFileHandle == -1) {
: iFileHandle = FileCreate("SysData.txt");
: SysData.MotBdBankAddr = 1;
: SysData.MotBdRelAddr1 = 1;
: FileWrite(iFileHandle, &SysData, sizeof(SysData));
: }
: else {
: FileSeek(iFileHandle, 0, 0);
: // return FALSE;
: FileRead(iFileHandle, &SysData, sizeof(SysData));
: }
: FileClose(iFileHandle);
: return TRUE;
: }
: //----------------------------------------------------------
: BOOL SaveData(void)
: {
: int oFileHandle = FileOpen("SysData.txt");//, fmOpenWrite);
: if(oFileHandle == -1) {
: ShowMessage("화일쓰기 오류");
: return FALSE;
: }
: FileWrite(oFileHandle, &SysData, sizeof(SysData));
: FileClose(oFileHandle);
: return TRUE;
: }
: //----------------------------------------------------------
:
:
: ==== SysData.h 내용 =====
: //----------------------------------------------------------
: #ifndef SysDataH
: #define SysDataH
: //----------------------------------------------------------
: #endif
: struct {
: //Board Addr Form
: int MotBdBankAddr;
: int MotBdRelAddr1;
: //이하생략
: } SysData;
: //----------------------------------------------------------
: BOOL LoadData(void);
: BOOL SaveData(void);
임펠리테리입니다.
어떤 부분이 잘 안된다는 것인지 구체적으로 적어주셨으면 좋았을 걸 그랬군요.
보여주신 소스에서는 별다른 잘못된 점이 보이지 않습니다. 다시 질문을 해주시면
좋겠군요.
그리고.. API 파일 함수들을 그대로 써도 좋지만, 빌더에서 쓰려면 그보다는
TFIleStream을 쓰는게 여러모로 편합니다. 클래스 자체는 그냥 API의 파일 함수들을
클래스화한 정도일 뿐이지만, 빌더에서는 여러가지 연관된 스트림 계열의 함수들이 많이
있으니까요.
그럼 참고하시길...
|