다음은 압축 된 파일을 허용하고 한 번에 1024 개의 문자를 읽음으로써 txt 파일로 변환하는 내 기능입니다.Delphi 7 및 Delphi XE4의 압축 풀기
procedure DecompressFile(const ACompressedFile, ADestinationFile : String);
var
SourceStream : TFileStream;
DestinationStream : TFileStream;
DecompressionStream : TDecompressionStream;
nRead : Integer;
Buffer: array [0..1023] of Char;
begin
SourceStream := TFileStream.Create(ACompressedFile, fmOpenRead);
try
DestinationStream := TFileStream.Create(ADestinationFile, fmCreate);
try
DecompressionStream := TDecompressionStream.Create(SourceStream);
try
repeat
nRead := DecompressionStream.Read(Buffer, 1024);
DestinationStream.Write(Buffer, nRead);
until nRead = 0;
finally
DecompressionStream.Free;
end;
finally
DestinationStream.Free;
end;
finally
SourceStream.Free;
end;
end;
내 문제는이 델파이 7의 경우 올바른 TXT 파일을 생성하지만, 델파이 XE4의 경우, 그것은 각각의 모든 문자 사이에 쓰레기 값을 도입한다는 것이다.
예 :
Delphi 7: abcdedfgh
Delphi XE4: aNULbNULcNULdNULeNULfNULgNULhNUL
NUL 모든 문자들 사이에 삽입된다. 나는 변화하는 선언을 시도했다
Buffer: array [0..1023] of Char;
to Buffer: array [0..1023] of AnsiChar;
그러나 이것은 효과가 없었다.
버퍼 대신 Char의 배열을 사용하는 것이 더 좋지만 여기서는 문제가되지 않습니다. XE4 텍스트는 유니 코드 인코딩 (UTF16?)과 같습니다. 라틴 심볼의 경우 항상 0 + ASCII 코드입니다. 같은 TXT 파일을 입력 (아마 코드에서 테스트 파일을 생성)하고 출력 (문자열 또는 다른 것으로 데이터를 읽는 것과 같은)에 다른 변환이없는 것이 확실합니까? –
포팅 한 거대한 애플리케이션에서 코드를 직접 게시 한 것처럼 보입니다. SSCCE를 게시했다면 훨씬 쉬울 것입니다. 그렇게 해봤자 문제가 해결되었을 것입니다. 마르코의 종이 읽었 니? –
@DavidHeffernan - 나는 이것을 나란히 읽고있다. –