|
저 코드를 해보진 않았지만, 읽고 쓰는데 있어서 bytes count 값이 이상한거 같네요.
sizeof( x.c_str() ) 와 같은 식으로 해야하지 않을까요.
해석 해 보다가 추가합니다.
도움말 내용대로면 다음과 같이 다 바꾸시면 될 듯 하네요.
Stream->Read( pPhonebook->Name.c_str(), pPhonebook->Name.Length() + 1 );
또아리 님이 쓰신 글 :
: Load/ Save 어떻게 하나요....아래는 제가 작성한 코드입니다.. 트리만 저장되고 노드데이터는 잘안되네요..제가 먼가 잘못하고 있는듯 한데..쩝..도와주세요
:
: Virtual Treeview에서..
:
: // Unit1.h 노드 선언
: typedef struct tagPhonebook {
: AnsiString Name;
: AnsiString Tel;
: AnsiString Sex;
: // int ImageIndex; // 출력할 이미지의 index
: } structPhonebook, *ptrstructPhonebook;
:
: private :
: AnsiString fName;
: // 이하 생략
: //-------------------------------------------------------------------------------------
:
: void __fastcall TForm1::VirtualStringTree1LoadNode(TBaseVirtualTree *Sender, // Load
: PVirtualNode Node, TStream *Stream)
: {
: int Size;
:
: if (!Node)
: return;
:
: structPhonebook *pPhonebook = (structPhonebook *)Sender->GetNodeData(Node);
:
: Stream->Read(Node, sizeof(Node));
: Stream->Read(pPhonebook->Name.c_str(), sizeof(pPhonebook->Name+1));
: Stream->Read(pPhonebook->Tel.c_str(), sizeof(pPhonebook->Tel.Length() +1));
: Stream->Read(pPhonebook->Sex.c_str(), sizeof(pPhonebook->Sex.Length()+1));
: }
: void __fastcall TForm1::VirtualStringTree1SaveNode(TBaseVirtualTree *Sender, // Save
: PVirtualNode Node, TStream *Stream)
: {
: if (!Node)
: return;
:
: structPhonebook *pPhonebook =(structPhonebook *)Sender->GetNodeData(Node);
:
: Stream->Write(Node, sizeof(Node));
: Stream->Write(pPhonebook->Name.c_str(), sizeof(pPhonebook->Name+1));
: Stream->Write(pPhonebook->Tel.c_str(), sizeof(pPhonebook->Tel.Length() +1));
: Stream->Write(pPhonebook->Sex.c_str(), sizeof(pPhonebook->Sex.Length()+1));
:
: }
:
:
: void __fastcall TForm1::SaveClick(TObject *Sender)
: {
: fName="tt.txt";
: VirtualStringTree1->SaveToFile(fName) ;
: }
: //---------------------------------------------------------------------------
:
:
: void __fastcall TForm1::LoadClick(TObject *Sender)
: {
: fName="tt.txt";
: VirtualStringTree1->LoadFromFile(fName);
: }
|