我有一些文件需要批量处理!我已经实现了压缩!(这部分没问题)!
我的问题是我压缩了以后!我必须解压缩!而且需要获得原始文件的大小并且申请内存空间才能实现还原原始文件的操作!
1.我是否应该在压缩的过程中就写入原始的文件大小还是怎样?
2.如果不是那么我在解压的过程中如何从被压缩后的文件中得到原始文件的大小呢?
3.能否帮我提供解压缩的代码(以下是我的压缩过程)!本人菜鸟请各位出手相助!
procedure TForm1.Button1Click(Sender: TObject);
begin
Findfile(Edit1.Text);
end;FUNCTION Findfile(Path :String):STRING;
var
Research : TsearchRec;
Found : integer;
ext : String;
Files : TStringlist;
begin
Files := Tstringlist.Create;
If Path[Length(Path)] <> '\' then
Path := Path + '\';
Found := Findfirst(Path+'*.*',FaAnyFile,Research);
While Found=0 do
begin
if (Research.Name <> '.') and (Research.Name <> '..') then
begin
If Research.Attr = faDirectory then
Findfile(Path+Research.Name+'\')
else
ext := UpperCase(ExtractFileExt(Research.Name));
if ext='.DCM' then
begin
Zip(Path+Research.Name);
//Unzip(Path+Research.Name);
form1.ListBox1.Items.Add(Research.Name);
end
end;
Found :=FindNext(Research);
end;end;FUNCTION Zip(Filename:String):STRING;
var
Comp : TCompressionStream;
SourceStream: TMemoryStream;
TempStream : TMemoryStream;
Count : integer;
P : Pointer;
begin
SourceStream := TMemoryStream.Create;
TempStream := TMemoryStream.Create;
SourceStream.LoadFromFile(Filename);
TRY
Count:= SourceStream.Size;
Getmem(p,Count);
Except
SourceStream.Free;
end;
Comp:=TCompressionStream.Create(clFastest,TempStream);
SourceStream.SaveToStream(Comp);
Comp.Free;
TempStream.SaveToFile('d:\'+ExtractFileName(Filename)+'zip');
end;
我的问题是我压缩了以后!我必须解压缩!而且需要获得原始文件的大小并且申请内存空间才能实现还原原始文件的操作!
1.我是否应该在压缩的过程中就写入原始的文件大小还是怎样?
2.如果不是那么我在解压的过程中如何从被压缩后的文件中得到原始文件的大小呢?
3.能否帮我提供解压缩的代码(以下是我的压缩过程)!本人菜鸟请各位出手相助!
procedure TForm1.Button1Click(Sender: TObject);
begin
Findfile(Edit1.Text);
end;FUNCTION Findfile(Path :String):STRING;
var
Research : TsearchRec;
Found : integer;
ext : String;
Files : TStringlist;
begin
Files := Tstringlist.Create;
If Path[Length(Path)] <> '\' then
Path := Path + '\';
Found := Findfirst(Path+'*.*',FaAnyFile,Research);
While Found=0 do
begin
if (Research.Name <> '.') and (Research.Name <> '..') then
begin
If Research.Attr = faDirectory then
Findfile(Path+Research.Name+'\')
else
ext := UpperCase(ExtractFileExt(Research.Name));
if ext='.DCM' then
begin
Zip(Path+Research.Name);
//Unzip(Path+Research.Name);
form1.ListBox1.Items.Add(Research.Name);
end
end;
Found :=FindNext(Research);
end;end;FUNCTION Zip(Filename:String):STRING;
var
Comp : TCompressionStream;
SourceStream: TMemoryStream;
TempStream : TMemoryStream;
Count : integer;
P : Pointer;
begin
SourceStream := TMemoryStream.Create;
TempStream := TMemoryStream.Create;
SourceStream.LoadFromFile(Filename);
TRY
Count:= SourceStream.Size;
Getmem(p,Count);
Except
SourceStream.Free;
end;
Comp:=TCompressionStream.Create(clFastest,TempStream);
SourceStream.SaveToStream(Comp);
Comp.Free;
TempStream.SaveToFile('d:\'+ExtractFileName(Filename)+'zip');
end;
var
instream: Tmemorystream;
zstream: Tcompressionstream;
outstream: Tmemorystream;
size: integer;
begin
inStream := TMemoryStream.Create;
try
inStream.LoadFromFile(FileName);
if instream.Size = 0 then
exit;
size := instream.size;
outstream := Tmemorystream.create;
zstream := Tcompressionstream.Create(clmax, outstream);
try
instream.SaveToStream(zstream);
zstream.free;
outstream.Position := 0;
instream.clear;
instream.WriteBuffer(size, sizeof(size));
instream.CopyFrom(outstream, 0);
finally
outstream.free;
end;
instream.SaveToFile(FileName);
finally
inStream.Free;
end;
end;procedure DecompresSstream(FileName: string);
var
instream: Tmemorystream;
zstream: Tdecompressionstream;
outstream: Tmemorystream;
size: integer;
buffer: pchar;
begin
inStream := TMemoryStream.Create;
inStream.LoadFromFile(FileName);
try
if instream.Size = 0 then
exit; instream.Position := 0;
instream.ReadBuffer(size, sizeof(size));
getmem(buffer, size);
outstream := Tmemorystream.create;
zstream := Tdecompressionstream.Create(instream);
try
zstream.Readbuffer(buffer^, size);
outstream.WriteBuffer(buffer^, size);
outstream.Position := 0;
instream.clear;
instream.CopyFrom(outstream, 0);
finally
zstream.free;
outstream.Free;
freemem(buffer);
end;
finally
inStream.SaveToFile(fileName);
inStream.Free;
end;
end;
看看控件安装是否有错误? 先测试一下DEMO
也发一份给我好吗!我的E-MAIL:[email protected]