|
마찬가지입니다. 값은 확인해 보니 Size=11 Position=6입니다.
김용수 님이 쓰신 글 :
: 문제의 종류가 무엇인지 알 수 없지만 아래와 같이 수정해서 실행해 보시기 바랍니다.
: 참고로 본인은 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);
|