怎样读取记事本的每一行信息到DELPHI中的memo1中
内容如下:
这是一份测试信息..................
信息内容如下:
abdsfsdf
sdfsdfsdfsd
sdfsdfwerewrew
sdfsdwerwerewrewrew
fdsfdsfdfdsfwerwerwerwer
dsfdsfdfdffsdfdfdsfsdfdsfdsffde
ewrewrwerewrwerwerwerwerewrwe
//如何编程实现利用zlib进行压缩的写入demo.dat文件
或者通过按扭"读取"解压文件内容到memo1中
内容如下:
这是一份测试信息..................
信息内容如下:
abdsfsdf
sdfsdfsdfsd
sdfsdfwerewrew
sdfsdwerwerewrewrew
fdsfdsfdfdsfwerwerwerwer
dsfdsfdfdffsdfdfdsfsdfdsfdsffde
ewrewrwerewrwerwerwerwerewrwe
//如何编程实现利用zlib进行压缩的写入demo.dat文件
或者通过按扭"读取"解压文件内容到memo1中
zlib;//将Src使用Zlib压缩后存入Dst当中
procedure PackStream(const Src:TStream; Dst:TStream);
var
CompStream: TCompressionStream;
begin
//增加“断言”以防止输入参数有误
Assert(Src <> Nil);
Assert(Dst <> Nil);CompStream := TCompressionStream.Create(clDefault,Dst);
try
//将源数据的偏移转到首部
Src.Seek(0,soFromBeginning);
//使用CopyFrom将源数据输入到压缩流,以实现压缩
CompStream.CopyFrom(Src,0);
finally
CompStream.Free;
end;
end;//将以zlib压缩的Src解压缩后存入Dst当中
procedure UnpackStream(const Src:TStream; Dst:TStream);
var
DecompStream: TDecompressionStream;
NewSize: Int64;
begin
//增加“断言”以防止输入参数有误
Assert(Src <> Nil);
Assert(Dst <> Nil);DecompStream:= TDecompressionStream.Create(Src);
try
//将源数据的偏移转到首部
NewSize := Src.Seek(0, soFromEnd);
Src.Seek(0, soFromBeginning);
//使用CopyFrom将源数据输入到解压缩流,以实现解压缩
//并得到实际解压缩后的数据大小(NewSize)
//内部会使用AllocMem(System单元定义)对Dst进行内存重新分配
//所以,Dst的内存管理必须兼容AllocMem进行内存分配
NewSize := Dst.CopyFrom(DecompStream,NewSize);
//重新设置Dst的实际大小(已经在解压缩过程当中进行重新分配)
Dst.Size := NewSize;
finally
DecompStream.Free;
end;
end;//测试代码
procedure Test;
var
SrcStream,PackedStream,UnpackedStream:TMemoryStream;
begin
SrcStream := TMemoryStream.Create;
try
SrcStream.LoadFromFile('c:\test.xml');
PackedStream := TMemoryStream.Create;
try
//压缩
PackStream(SrcStream, PackedStream); PackedStream.Seek(0, soFromBeginning);
PackedStream.SaveToFile('c:\test_xml.pk');
UnpackedStream := TMemoryStream.Create;
try
//解压缩
UnpackStream(PackedStream, UnpackedStream); UnpackedStream.Seek(0, soFromBeginning);
UnpackedStream.SaveToFile('c:\test_xml.xml');
finally
UnpackedStream.Free;
end;
finally
PackedStream.Free;
end;
finally
SrcStream.Free;
end;
end;
然后指向了这句:NewSize := Dst.CopyFrom(DecompStream,NewSize);
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
uses
zlib;
//将Src使用Zlib压缩后存入Dst当中
procedure PackStream(const Src:TStream; Dst:TStream);
var
CompStream: TCompressionStream;
begin
//增加“断言”以防止输入参数有误
Assert(Src <> Nil);
Assert(Dst <> Nil);CompStream := TCompressionStream.Create(clDefault,Dst);
try
//将源数据的偏移转到首部
Src.Seek(0,soFromBeginning);
//使用CopyFrom将源数据输入到压缩流,以实现压缩
CompStream.CopyFrom(Src,0);
finally
CompStream.Free;
end;
end;//将以zlib压缩的Src解压缩后存入Dst当中
procedure UnpackStream(const Src:TStream; Dst:TStream);
var
DecompStream: TDecompressionStream;
NewSize: Int64;
begin
//增加“断言”以防止输入参数有误
Assert(Src <> Nil);
Assert(Dst <> Nil);DecompStream:= TDecompressionStream.Create(Src);
try
//将源数据的偏移转到首部
NewSize := Src.Seek(0, soFromEnd);
Src.Seek(0, soFromBeginning);
//使用CopyFrom将源数据输入到解压缩流,以实现解压缩
//并得到实际解压缩后的数据大小(NewSize)
//内部会使用AllocMem(System单元定义)对Dst进行内存重新分配
//所以,Dst的内存管理必须兼容AllocMem进行内存分配
NewSize := Dst.CopyFrom(DecompStream,NewSize);
//重新设置Dst的实际大小(已经在解压缩过程当中进行重新分配)
Dst.Size := NewSize;
finally
DecompStream.Free;
end;
end;//测试代码
procedure Test;
var
SrcStream,PackedStream:TMemoryStream;
begin
SrcStream := TMemoryStream.Create;
try
SrcStream.LoadFromFile('c:\test.txt');
PackedStream := TMemoryStream.Create;
try
//压缩
PackStream(SrcStream, PackedStream); PackedStream.Seek(0, soFromBeginning);
PackedStream.SaveToFile('c:\test_txt.pk');
//UnpackedStream := TMemoryStream.Create;
{try
//解压缩
UnpackStream(PackedStream, UnpackedStream); UnpackedStream.Seek(0, soFromBeginning);
UnpackedStream.SaveToFile('c:\test_txt.txt');
finally
UnpackedStream.Free;
end;}
finally
PackedStream.Free;
end;
finally
SrcStream.Free;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
//setbkmode(canvas.handle,1);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
test;
end;procedure TForm1.Button2Click(Sender: TObject);
var
SrcStream,PackedStream,UnpackedStream:TMemoryStream;
begin
SrcStream := TMemoryStream.Create;
try
SrcStream.LoadFromFile('c:\test_txt.pk');
PackedStream := TMemoryStream.Create;
{try
//压缩
PackStream(SrcStream, PackedStream); PackedStream.Seek(0, soFromBeginning);
PackedStream.SaveToFile('c:\test_txt.pk');}
UnpackedStream := TMemoryStream.Create;
try
//解压缩
UnpackStream(PackedStream, UnpackedStream); UnpackedStream.Seek(0, soFromBeginning);
UnpackedStream.SaveToFile('c:\test_txt.txt');
finally
UnpackedStream.Free;
end;
{finally
PackedStream.Free;
end;}
finally
SrcStream.Free;
end;
end;
end.
我的测试代码,直接用版主的代码,如果测试txt没问题,可以正常压缩,但解压缩出现问题,即解出来的txt内容少一些所以,我分解出来,结果和上面说的一样,还是指向哪句报错?NewSize := Dst.CopyFrom(DecompStream,NewSize);
为什么这条语句出错呀...............