就当是面试题目~~~~帮我看看! //压缩文件 procedure CompressFile(Source, Target: string); var i : integer; Buf : array[0..BufSize] of byte; ComStream : TCompressionStream; InStream, OutStream: TFileStream; begin if not FileExists(Source) then Exit; InStream := nil; OutStream := nil; ComStream := nil; try // 产生流 InStream := TFileStream.Create(Source, fmOpenRead or fmShareDenyNone); OutStream := TFileStream.Create(Target, fmCreate or fmShareDenyWrite); ComStream := TCompressionStream.Create(clMax, OutStream); //压缩流 for i := 1 to (InStream.Size div BufSize) do begin InStream.ReadBuffer(Buf, BufSize); ComStream.Write(Buf, BufSize); end; i := InStream.Size mod BufSize; if (i > 0) then begin InStream.ReadBuffer(Buf, i); ComStream.Write(Buf, i); end; InStream.Free; InStream := nil; ComStream.Free; ComStream := nil; // 调用自己的加密函数----这里没有问题,可以正常输出加密压缩的文件! EncryptStream(OutStream); OutStream.Free; OutStream := nil; except on E: Exception do begin if (InStream <> nil) then InStream.Free; if (OutStream <> nil) then OutStream.Free; if (ComStream <> nil) then ComStream.Free; MessageDlg(COMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0); end; end; end;//解压文件 procedure DecompressFile(Source, Target: string); var i : integer; Buf : array[0..BufSize] of byte; DecomStream : TDecompressionStream; MemStream : TMemoryStream; OutStream : TFileStream; begin if not FileExists(Source) then Exit; MemStream := nil; OutStream := nil; DecomStream := nil; try //从件加载压缩文件 MemStream := TMemoryStream.Create; MemStream.LoadFromFile(Source); //调用自己的解密函数,测试了的,加密解密函数没有问题,解出的数据没有问题 DecryptStream(MemStream); OutStream := TFileStream.Create(Target, fmCreate or fmShareDenyWrite); DecomStream := TDecompressionStream.Create(MemStream); //解压文件 repeat i := DecomStream.Read(Buf, BufSize); //这里出问题,始终读出的是0个字节 OutStream.WriteBuffer(Buf, i); until (i = 0); OutStream.Free; OutStream := nil; DecomStream.Free; DecomStream := nil; MemStream.Free; MemStream := nil; except on E: Exception do begin if (MemStream <> nil) then MemStream.Free; if (OutStream <> nil) then OutStream.Free; if (DecomStream <> nil) then DecomStream.Free; MessageDlg(DECOMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0); end; end; end;/////////////////////////////////////////////////////简单的加解密函数 procedure EncryptStream(InStream: TStream); var InStreamMem : TMemoryStream; p : pbyte; i : dword; begin if InStream.Size >= 0 then begin InStreamMem := TMemoryStream.Create; InStreamMem.LoadFromStream(InStream); p := InStreamMem.Memory; for i := 1 to InStreamMem.Size do p^ := p^- i; InStream.Seek(0, soFromBeginning); InStream.CopyFrom(InStreamMem, InStreamMem.Size); InStreamMem.Free; end; end;procedure DecryptStream(InStream: TStream); var InStreamMem : TMemoryStream; p : pbyte; i : dword; begin if InStream.Size >= 0 then begin InStreamMem := TMemoryStream.Create; InStreamMem.LoadFromStream(InStream); p := InStreamMem.Memory; for i := 1 to InStreamMem.Size do p^ := p^+ i; InStream.Seek(0, soFromBeginning); InStream.CopyFrom(InStreamMem, InStreamMem.Size); InStreamMem.Free; end; end;求各位大侠指教........在线等答案!揭贴给分!!
数据库设计软件powerdesginer。
//压缩文件
procedure CompressFile(Source, Target: string);
var
i : integer;
Buf : array[0..BufSize] of byte;
ComStream : TCompressionStream;
InStream, OutStream: TFileStream;
begin
if not FileExists(Source) then
Exit;
InStream := nil;
OutStream := nil;
ComStream := nil;
try
// 产生流
InStream := TFileStream.Create(Source, fmOpenRead or fmShareDenyNone);
OutStream := TFileStream.Create(Target, fmCreate or fmShareDenyWrite);
ComStream := TCompressionStream.Create(clMax, OutStream); //压缩流
for i := 1 to (InStream.Size div BufSize) do begin
InStream.ReadBuffer(Buf, BufSize);
ComStream.Write(Buf, BufSize);
end; i := InStream.Size mod BufSize;
if (i > 0) then begin
InStream.ReadBuffer(Buf, i);
ComStream.Write(Buf, i);
end; InStream.Free;
InStream := nil; ComStream.Free;
ComStream := nil; // 调用自己的加密函数----这里没有问题,可以正常输出加密压缩的文件!
EncryptStream(OutStream); OutStream.Free;
OutStream := nil;
except
on E: Exception do begin
if (InStream <> nil) then
InStream.Free;
if (OutStream <> nil) then
OutStream.Free;
if (ComStream <> nil) then
ComStream.Free;
MessageDlg(COMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
end;
end;
end;//解压文件
procedure DecompressFile(Source, Target: string);
var
i : integer;
Buf : array[0..BufSize] of byte;
DecomStream : TDecompressionStream;
MemStream : TMemoryStream;
OutStream : TFileStream;
begin
if not FileExists(Source) then
Exit; MemStream := nil;
OutStream := nil;
DecomStream := nil;
try
//从件加载压缩文件
MemStream := TMemoryStream.Create;
MemStream.LoadFromFile(Source); //调用自己的解密函数,测试了的,加密解密函数没有问题,解出的数据没有问题
DecryptStream(MemStream); OutStream := TFileStream.Create(Target, fmCreate or fmShareDenyWrite);
DecomStream := TDecompressionStream.Create(MemStream);
//解压文件
repeat
i := DecomStream.Read(Buf, BufSize); //这里出问题,始终读出的是0个字节
OutStream.WriteBuffer(Buf, i);
until (i = 0); OutStream.Free;
OutStream := nil; DecomStream.Free;
DecomStream := nil; MemStream.Free;
MemStream := nil;
except
on E: Exception do begin
if (MemStream <> nil) then
MemStream.Free;
if (OutStream <> nil) then
OutStream.Free;
if (DecomStream <> nil) then
DecomStream.Free;
MessageDlg(DECOMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
end;
end;
end;/////////////////////////////////////////////////////简单的加解密函数
procedure EncryptStream(InStream: TStream);
var
InStreamMem : TMemoryStream;
p : pbyte;
i : dword;
begin
if InStream.Size >= 0 then
begin
InStreamMem := TMemoryStream.Create;
InStreamMem.LoadFromStream(InStream);
p := InStreamMem.Memory;
for i := 1 to InStreamMem.Size do
p^ := p^- i;
InStream.Seek(0, soFromBeginning);
InStream.CopyFrom(InStreamMem, InStreamMem.Size);
InStreamMem.Free;
end;
end;procedure DecryptStream(InStream: TStream);
var
InStreamMem : TMemoryStream;
p : pbyte;
i : dword;
begin
if InStream.Size >= 0 then
begin
InStreamMem := TMemoryStream.Create;
InStreamMem.LoadFromStream(InStream);
p := InStreamMem.Memory;
for i := 1 to InStreamMem.Size do
p^ := p^+ i;
InStream.Seek(0, soFromBeginning);
InStream.CopyFrom(InStreamMem, InStreamMem.Size);
InStreamMem.Free;
end;
end;求各位大侠指教........在线等答案!揭贴给分!!