|
아마도 파일 쓰기 부분에서 잘못 된 것 같아요..
이렇게 직접 쓰는 루틴은 어떠신가요...? CFG 파일에 들어가야할 수가 여러개면, fgets, fputs 를 for 문으로 loop 돌리시면 됩니다. (단, fgets에서는 eof 체크를 해주셔야 겠죠..?)
#include <stdio.h>
#define CONFIG_FILENAME "c:\\test.cfg"
#define DEFAULT 1
byte COMPORT;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
FILE *fiHandle;
char chString[255];
fiHandle = fopen(CONFIG_FILENAME, "rb");
FillMemory(&chString[0], sizeof(chString), 0);
if(fiHandle)
fgets(chString, sizeof(chString), fiHandle);
COMPORT = (BYTE)(atoi(chString)) < 1 || (BYTE)(atoi(chString)) > 4 ?
DEFAULT : (BYTE)(atoi(chString));
RadioGroup1->ItemIndex = COMPORT - 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
FILE *fiHandle;
char chString[255];
fiHandle = fopen(CONFIG_FILENAME, "wb");
sprintf(chString, "%d\n", COMPORT);
if(fiHandle)
fputs(chString, fiHandle);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
COMPORT = RadioGroup1->ItemIndex + 1;
}
권혁준 님이 쓰신 글 :
: 안녕하세요
: 바쁘시더라도 함 봐주셔요...
:
: fstream IniFile("화일명.cfg");
:
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
:
: IniFile.getline(StoredComSetting,2);
: ComPort = (BYTE)(atoi(StoredComSetting));
:
: }
: void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
: {
: IniFile.seekg(0,ios::beg);
: IniFile << (int)(ComPort) << "\n";
: DestroySystems();
: }
: // 컴포트 선택 다이얼로그
: void __fastcall TPortSelection::FormCreate(TObject *Sender)
: {
: // Range Check on create to eliminate errors.
: if (ComPort > 4) {// com4까지만 있음
: ComPortSelectionGroup->ItemIndex = 1;
: }
: else {
: ComPortSelectionGroup->ItemIndex = ComPort-1;
: }
: }
: 메인폼의 Create에서 파일에 입력된 포트값을 읽어서 컴포트 선택 다이얼로그가 뜰때
: 그 값대로 라디오버튼을 체크합니다....
: 메인폼이 끝날때 그값을 파일에 저장해 놓구요...
:
: 문제는.....
: 처음 실행해서 컴포트 라디오버튼을 체크한후 프로그램 종료후 다시 실행 시키면
: CFG 파일에 그 값이 저장이 안되서 컴포트가 선택이 안됩니다.....
: 그래서 cfg파일을 열어서 제가 임으로 숫자를 넣어 주면....그다음 부터는...
: 제대로 동작이 됩니다...
: 컴포트 바꾸고 종료후 다시 실행하면...cfg파일에서 읽어와서 마지막에 세팅됬던..
: 컴포트에 체크가 되지요....
:
: 이유를 모르겠습니다.........
: cfg파일을 강제적으로 수정을 가한후 하면 되네요......
: 이소스는 bcb3 버젼에서 짰던 소스구요....전 5를 사용하고 있습니다...
:
: 살려주세요............
: 혹시 이방법 말고 딴 방법이 있으면 알려주셔도 감사하겠습니다...
:
:
:
|