|
문제의 종류가 무엇인지 알 수 없지만 아래와 같이 수정해서 실행해 보시기 바랍니다.
참고로 본인은 ZipBuilder를 사용한 적이 없고 ZipBuilder가 설치되어 있지 않으므로
아래 코드가 전혀 효과가 없거나 문법 오류가 발생할 수 도 있으니 이점 양지하여 주시기 바랍니다.
또한 아래 코드중 본인이 추가, 수정한 내역은
Stream 관련 내역중 Read/Write시 Stream의 Position이 이동되는
부분에 대한 교정과 new 연산자로 배열을 할당 받은 경우 해제하는 delete [] 부분입니다.
후자의 경우 예전엔 그렇게 사용하는 것이 맞는 방법이였으나 요즘은 어떻게 바뀌었는지
모르겠네요 -.-;;
실행해 보시고 리플 달아주시면 고맙겠습니다(갠적으로 결과가 중금해서리... ^_^;;)
즐거운 하루 되시길.....
TMemoryStream* ZipData;
AnsiString strInput, strOutput;
char* szData;
int nSize;
strInput = "1111111111";
////////////////////////////////////////////////////////
ZipData = new TMemoryStream();
ZipData->Write(strInput.c_str(), strInput.Length());
ZipBuilder1->AddStreamToStream(ZipData);
nSize = ZipBuilder1->ZipStream->Size; // 여기, ZipBuilder1->ZipStream->Position, ZipStream->Position 값 확인해 볼 것
szData = new char[nSize + 1];
ZipBuilder1->ZipStream->Position = 0; // 또는 ZipBuilder1->ZipStream->Seek( 0, soFromBeginning ); // 여기
ZipBuilder1->ZipStream->ReadBuffer(szData, nSize);
szData[nSize] = '\0';
strOutput = (AnsiString)szData;
delete [] szData; // 여기
delete ZipData;
////////////////////////////////////////////////////////
ZipData = new TMemoryStream();
nSize = strOutput.Length();
szData = new char[nSize + 1];
strcpy(szData, strOutput.c_str());
ZipData->WriteBuffer(szData, nSize);
delete [] szData; // 여기
ZipData->Position = 0; // 여기
ZipBuilder1->ExtractStreamToStream(ZipData);
nSize = ZipBuilder1->ZipStream->Size; // 여기
szData = new char[nSize + 1];
ZipBuilder1->ZipStream->Position = 0; // 또는 ZipBuilder1->ZipStream->Seek( 0, soFromBeginning ); // 여기
ZipBuilder1->ZipStream->ReadBuffer(szData, nSize);
szData[nSize] = '\0';
strOutput = (AnsiString)szData;
delete [] szData; // 여기
delete ZipData;
ShowMessage(strOutput);
--------------------------------------------------------------
alberddo 님이 쓰신 글 :
: ZipBuilder를 사용하여 ZipStream만든후 이를 AnsiString으로 저장했다가 사용하는 방법을 알고 싶습니다.
: ReadBuffer, WriteBuffer를 사용하는 방법이 잘못 됬나요?
:
: 아래코드는 문제가 발생하는 코드입니다.
: TMemoryStream* ZipData;
: AnsiString strInput, strOutput;
: char* szData;
: int nSize;
:
: strInput = "1111111111";
:
: ////////////////////////////////////////////////////////
: ZipData = new TMemoryStream();
: ZipData->Write(strInput.c_str(), strInput.Length());
: ZipBuilder1->AddStreamToStream(ZipData);
:
: nSize = ZipBuilder1->ZipStream->Size - ZipBuilder1->ZipStream->Position;
: szData = new char[nSize + 1];
: ZipBuilder1->ZipStream->ReadBuffer(szData, nSize);
: szData[nSize] = '\0';
: strOutput = (AnsiString)szData;
: delete szData;
: delete ZipData;
:
: ////////////////////////////////////////////////////////
: ZipData = new TMemoryStream();
: nSize = strOutput.Length();
: szData = new char[nSize + 1];
: strcpy(szData, strOutput.c_str());
: ZipData->WriteBuffer(szData, nSize);
: delete szData;
: ZipBuilder1->ExtractStreamToStream(ZipData);
:
: nSize = ZipBuilder1->ZipStream->Size - ZipBuilder1->ZipStream->Position;
: szData = new char[nSize + 1];
: ZipBuilder1->ZipStream->ReadBuffer(szData, nSize);
: szData[nSize] = '\0';
: strOutput = (AnsiString)szData;
: delete szData;
: delete ZipData;
:
: ShowMessage(strOutput);
|