|
모름이 님이 쓰신 글 :
: 구조체에 저장된 데이터를 파일(*.txt)로 저장하고
: 그 파일을 읽어 데이터를 다시 구조체에 저장하는 프로그램을 구성하려고 합니다.
: 데이터를 저장하면 아스키문자가 파일로 저장됩니다.
: visual C에서는 그대로 입력되었던 것같은데, 뭔가 더 추가해야 할 사항이 있는지...
: 예제를 올리겠습니다.
: ////////////////////////////////////////////////////////////////////////////////////////
: void __fastcall TForm1::Button1Click(TObject *Sender) //파일로부터 읽기 버튼입니다.
: {
: AnsiString temp_filename;
: int iFileHandle;
: int iFileLen;
:
: temp_filename=Edit1->Text;
: if(!FileExists(temp_filename))
: { //file create
: iFileHandle=FileCreate(temp_filename);
: Memo1->Lines->Add("파일이 생성됨.");
: }
: else
: { //file에 있는 데이터 loading
: iFileHandle=FileOpen(temp_filename,fmOpenReadWrite);
: iFileLen=FileSeek(iFileHandle,0,2);
: FileSeek(iFileHandle,0,0);
: FileRead(iFileHandle,&G_DATA,iFileLen);<=======G_DATA를 찍어보면 이상한 문자가 있습니다.
: FileClose(iFileHandle);
: Memo1->Lines->Add(G_DATA.m_data1);
: Memo1->Lines->Add(G_DATA.m_data2);
: }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button2Click(TObject *Sender) //파일에 쓰기 버튼입니다.
: {
: AnsiString filename;
: int iFileHandle;
: int iLen;
: filename=Edit1->Text;
:
: iFileHandle=FileCreate(filename);
: G_DATA.m_data1=Edit2->Text;
: G_DATA.m_data2=Edit3->Text;
: FileWrite(iFileHandle,&G_DATA,sizeof(G_DATA));
:
: FileClose(iFileHandle);
: }
:
: ===> 다시 해보니, 문자열 빼고는 모두 적용이 됩니다.
: 데이터를 문자열로 하면(AnsiString), 엉뚱한 값이 나오네요.-_-
: 방법을 부탁드립니다.
:
임펠리테리입니다.
안시스트링은 문자열에 대한 래퍼 클래스이므로 클래스 객체를 그대로 파일로 쓰면 엉뚱한 값이 들어갑니다. 안시스트링 외에 기본적인 타입들은 안그렇지요. 설명하신 내용으로 봐서는 비주얼C++에서 했던 방법에서는 스트링을 CString이 아닌 char * 를 쓰셨던 것 같습니다. 빌더에서도 char * 를 쓰시면 똑같이 됩니다. 단, 구조체 내의 char * 타입 변수도 메모리 할당을 해줘야 하지요.
그럼 참고하시길..
|