M
mat
Unregistered / Unconfirmed
GUEST, unregistred user!
因程序设计的需要,要把比较大的文件分成小的文件块来传递,保存。研究了几天,碰上
一点小麻烦。代码如下。
public
{ Public declarations }
bigfile,smallfile:string;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var m,n:tmemorystream;
i,j:integer;
begin
if bigfile='' then
exit;
m:=tmemorystream.Create;
m.LoadFromFile(bigfile);
{ n:=tmemorystream.Create;
n.SetSize(3276800);
j:=tmemorystream.Create;
j.SetSize(m.size-3276800);
move(m.memory^,n.memory^,3276800);
//m.Position:=32768;
move(m.memory^,j.memory^,m.size-3276800);
n.SaveToFile('c:/001.swf');
j.SaveToFile('c:/002.swf');
m.Free;
n.free;
j.free; }
j:=(m.Size div 32768);
i:=0;
while i<=j do
begin
n:=tmemorystream.Create;
if i=j then
begin
n.SetSize(m.size mod 32768);
move(m.memory^,n.memory^,(m.size mod 32768));
end
else
begin
n.SetSize(32768);
move(m.memory^,n.memory^,32768);
end;
n.SaveToFile('c:'+copy(inttostr(i+1000),2,3)+'.cut');
inc(i);
n.Free;
end;
m.free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var m,n:tmemorystream;
i,j:integer;
begin
m:=tmemorystream.Create;
{ n:=tmemorystream.Create;
j:=tmemorystream.Create;
n.LoadFromFile('c:/001.swf');
j.LoadFromFile('c:/002.swf');
m.SetSize(n.size+j.size);
move(n.memory^,m.memory^,n.size);
move(j.memory^,m.memory^,j.size);
m.SaveToFile('c:/003.swf');
m.free;
n.free;
j.free; }
i:=0;
j:=159;
m.SetSize(5230496);//根据选择的原文件大小而不同
while i<=j do
begin
n:=tmemorystream.Create;
n.LoadFromFile('c:/'+copy(inttostr(i+1000),2,3)+'.cut');
move(n.memory^,m.memory^,n.size);
inc(i);
n.free;
end;
m.SaveToFile('c:/02.swf');
m.Free;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
bigfile:=OpenDialog1.FileName;
end;
以上部分的代码均可执行,如果用注释部分的内容,文件将分成两个小的文件,切割合并
均无问题。但当采用非注释部分的时候,文件切割合并以后得到的还原文件无法正常运行。
请高手指点。
一点小麻烦。代码如下。
public
{ Public declarations }
bigfile,smallfile:string;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var m,n:tmemorystream;
i,j:integer;
begin
if bigfile='' then
exit;
m:=tmemorystream.Create;
m.LoadFromFile(bigfile);
{ n:=tmemorystream.Create;
n.SetSize(3276800);
j:=tmemorystream.Create;
j.SetSize(m.size-3276800);
move(m.memory^,n.memory^,3276800);
//m.Position:=32768;
move(m.memory^,j.memory^,m.size-3276800);
n.SaveToFile('c:/001.swf');
j.SaveToFile('c:/002.swf');
m.Free;
n.free;
j.free; }
j:=(m.Size div 32768);
i:=0;
while i<=j do
begin
n:=tmemorystream.Create;
if i=j then
begin
n.SetSize(m.size mod 32768);
move(m.memory^,n.memory^,(m.size mod 32768));
end
else
begin
n.SetSize(32768);
move(m.memory^,n.memory^,32768);
end;
n.SaveToFile('c:'+copy(inttostr(i+1000),2,3)+'.cut');
inc(i);
n.Free;
end;
m.free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var m,n:tmemorystream;
i,j:integer;
begin
m:=tmemorystream.Create;
{ n:=tmemorystream.Create;
j:=tmemorystream.Create;
n.LoadFromFile('c:/001.swf');
j.LoadFromFile('c:/002.swf');
m.SetSize(n.size+j.size);
move(n.memory^,m.memory^,n.size);
move(j.memory^,m.memory^,j.size);
m.SaveToFile('c:/003.swf');
m.free;
n.free;
j.free; }
i:=0;
j:=159;
m.SetSize(5230496);//根据选择的原文件大小而不同
while i<=j do
begin
n:=tmemorystream.Create;
n.LoadFromFile('c:/'+copy(inttostr(i+1000),2,3)+'.cut');
move(n.memory^,m.memory^,n.size);
inc(i);
n.free;
end;
m.SaveToFile('c:/02.swf');
m.Free;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
bigfile:=OpenDialog1.FileName;
end;
以上部分的代码均可执行,如果用注释部分的内容,文件将分成两个小的文件,切割合并
均无问题。但当采用非注释部分的时候,文件切割合并以后得到的还原文件无法正常运行。
请高手指点。