|
구조체에 AnsiString을 char 배열로 바꿔서 사용하세요
그래야 sizeof(st_Test) 로 저장시 값이 정상으로 저장됩니다.
sizeof(AnsiString) 값이 얼마인지 확인해보세요.
실제 Length 값이 나오지 않습니다.
가장 편하게 하려면 AnsiString 사용된 부분을 char 배열로 변경하시고
저장 및 불러오기 할 때 이 구조체 사용하시고 실제 char 배열을 다시 AnsiString 임시 변수 만들어서
필요한 부분에 사용하시면 됩니다.
축구 님이 쓰신 글 :
: struct st_Test
: {
: int nTestSize;
: double DateTime;
: AnsiString strIP;
: AnsiString strPORT;
:
: st_Test()
: {
: nTestSize= 0;
: DateTime = 0;
: }
: };
: 구조체는 이렇게 쓰고있어요.이것 저것 해보느라 조금 바뀌었어여 밑에것도 바꿔 놀게요
:
: 송신영 님이 쓰신 글 :
: : stTest 구조체를 올려보세요.
: : String을 사용한 경우 FileStream으로 저장하기 위해서는 추가적인 작업이 필요합니다.
: : 저장할 때 먼저 Int 형으로 String 의 길이를 저장하고 String의 c_str() 형으로 데이터를 저장해주고
: : 나중에 읽을 때 int형의 길이를 읽어 해당 길이만큼 문자열을 읽고 이 문자열을 다시 String 변수에 넣어주는 방식을
: : 사용해야합니다.
: :
: : 축구 님이 쓰신 글 :
: : : st_Test stTest;
: : :
: : : stTest.nTestSize = AData.Length;
: : : stTest.DateTime = now.Val;
: : : stTest.strIP = strIP;
: : : stTest.strPORT = strPORT;
: : :
: : : TFileStream *pSendHeaderData = new TFileStream(Edit1->Text, fmOpenWrite|fmShareExclusive);
: : :
: : : pSendHeaderData->Seek(0, SEEK_END);
: : :
: : : pSendHeaderData->Write((void *)&stTest, sizeof(st_Test));
: : : pSendHeaderData->Write(&AData[0], AData.Length);
: : :
: : : delete pSendHeaderData;
: : :
: : : 파일에 저장하고요, 불러들이는게 어려운데요
: : :
: : : TFileStream *pFileStream = new TFileStream(OpenDialog1->FileName, fmOpenRead);
: : : st_Test *stTest = new st_Test();
: : :
: : : pFileStream->Position = 0;
: : :
: : : while(pFileStream->Position < pFileStream->Size)
: : : {
: : : pFileStream->Read(stTest , sizeof(st_Test )); //쓰레기값 들어감
: : :
: : : TBytes ReadBytes;
: : : ReadBytes.Length = stTest ->nTestSize ;
: : : pFileStream->Read((void *)ReadBytes[0], ReadBytes.Length); //집어넣은 값말고, 쓰레기
: : : 값이 들어옴
: : : TDateTime now;
: : : now.Val = stTest ->DateTime;
: : :
: : : AnsiString strIP;
: : : AnsiString strPORT;
: : : strIP = stTest ->strIP;
: : : strPORT = stTest ->strPORT;
: : :
: : : PrintReceveList(now, strIP, strPORT, ReadBytes); //출력함수
: : : }
: : : delete stTest ;
: : : delete pFileStream;
: : :
: : : 이렇게 했는데 저 위에 왜 쓰레기 값이 들어올까요??? 도저히 모르겠어요
|