我有一个文本文件,现在我想将其读出来保存为二进制文件,然后再程序中再读取该二进制文件,请问该如何做到?我使用Tmemorystream来读写二进制文件,但是一直没有弄成功啊,大家帮我看看是怎么回事
//文件65.txt的内容
1 2 3 4 5 6
1 2 3 6 9 10
1 2 3 7 8 10
1 2 4 6 7 8
然后是读出该文本文件的内容
procedure TForm1.Button1Click(Sender: TObject);
var
myFile:TextFile;
q,temp1 : string;
test : Integer;
begin
AssignFile(myfile,'F:\\Delphi\\65.txt');
Reset(myfile);
while not Eof(myfile) do
begin
Readln(myfile, q);
temp2 := temp2 + q ; //将文本文件中的内容保存到temp2全局变量中
ListBox1.Items.Add(q);
end;
closefile(myfile);
//可以正确读取出来,temp2的内容和文本文件中的内容相同
end;//然后开始将该内容写进二进制文件
procedure TForm1.Button3Click(Sender: TObject);
var
ms:tmemorystream;
t,q : string;
itt : Integer;
begin
ms := TMemoryStream.Create ;
t := temp2 ; //将文本中读取的内容赋值给t,再保存
ms.Write(t,length(t));
ms.SaveToFile('c:\test.test');
ms.free;
end;//然后是读取该二进制文件
procedure TForm1.Button2Click(Sender: TObject);
var
ms : Tmemorystream ;
p,q,iTemp:string;
i,j : Integer;
iftt : Integer;
begin
ms := TMemoryStream.Create ;
ms.loadfromFile('c:\test.test');
ms.read(p,238);
ms.free;
listbox1.Items.Add(p);
end;
但是却怎么也读取不了,老是出错,请各位大侠看看问题出在那里
//文件65.txt的内容
1 2 3 4 5 6
1 2 3 6 9 10
1 2 3 7 8 10
1 2 4 6 7 8
然后是读出该文本文件的内容
procedure TForm1.Button1Click(Sender: TObject);
var
myFile:TextFile;
q,temp1 : string;
test : Integer;
begin
AssignFile(myfile,'F:\\Delphi\\65.txt');
Reset(myfile);
while not Eof(myfile) do
begin
Readln(myfile, q);
temp2 := temp2 + q ; //将文本文件中的内容保存到temp2全局变量中
ListBox1.Items.Add(q);
end;
closefile(myfile);
//可以正确读取出来,temp2的内容和文本文件中的内容相同
end;//然后开始将该内容写进二进制文件
procedure TForm1.Button3Click(Sender: TObject);
var
ms:tmemorystream;
t,q : string;
itt : Integer;
begin
ms := TMemoryStream.Create ;
t := temp2 ; //将文本中读取的内容赋值给t,再保存
ms.Write(t,length(t));
ms.SaveToFile('c:\test.test');
ms.free;
end;//然后是读取该二进制文件
procedure TForm1.Button2Click(Sender: TObject);
var
ms : Tmemorystream ;
p,q,iTemp:string;
i,j : Integer;
iftt : Integer;
begin
ms := TMemoryStream.Create ;
ms.loadfromFile('c:\test.test');
ms.read(p,238);
ms.free;
listbox1.Items.Add(p);
end;
但是却怎么也读取不了,老是出错,请各位大侠看看问题出在那里
的地方是我改过的
procedure TForm1.Button1Click(Sender: TObject);
var
myFile:TextFile;
q,temp1 : string;
test : Integer;
begin
AssignFile(myfile,'e:\temp\65.txt');
Reset(myfile);
while not Eof(myfile) do
begin
Readln(myfile, q);
temp2 := temp2 + q ; //将文本文件中的内容保存到temp2全局变量中
ListBox1.Items.Add(q);
end;
closefile(myfile);
//可以正确读取出来,temp2的内容和文本文件中的内容相同
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ms:tmemorystream;
t,q : string;
itt : Integer;
begin
ms := TMemoryStream.Create ;
t := temp2 ; //将文本中读取的内容赋值给t,再保存
ms.Write(pchar(t)^,length(t));//这里 ms.SaveToFile('e:\temp\65b.txt');
ms.free;
end;procedure TForm1.Button3Click(Sender: TObject);
var
ms : Tmemorystream ;
p,q,iTemp:string;
i,j : Integer;
iftt : Integer;
p1:array[0..238] of char;//这里
begin
ms := TMemoryStream.Create ;
ms.loadfromFile('e:\temp\65b.txt');
ms.read(p1,238); //这里
ms.free;
p:=p1;
listbox1.Items.Add(p);
end;
你说的是什么意思呢?如果我想将文本内容写入二进制文件里,但又不想给用户直接可以打开记事本观看,那该怎么做呢?
var
myFile:TextFile;
q,temp1 : string;
test : Integer;
begin
AssignFile(myfile,'e:\temp\65.txt');
Reset(myfile);
while not Eof(myfile) do
begin
Readln(myfile, q);
temp2 := temp2 + q ; //将文本文件中的内容保存到temp2全局变量中
ListBox1.Items.Add(q);
end;
closefile(myfile);
//可以正确读取出来,temp2的内容和文本文件中的内容相同
end;procedure TForm1.Button2Click(Sender: TObject); //加密写文件
var
ms:tmemorystream;
t,q : string;
itt : Integer;
begin
ms := TMemoryStream.Create ;
t := temp2 ; //将文本中读取的内容赋值给t,再保存
for itt:=1 to length(t) do
t[itt]:=char(byte(t[itt]) xor $55); ms.Write(pchar(t)^,length(t));//这里 ms.SaveToFile('e:\temp\65b.txt');
ms.free;
end;procedure TForm1.Button3Click(Sender: TObject); //解密写文件
var
ms : Tmemorystream ;
p,q,iTemp:string;
i,j : Integer;
l,iftt : Integer; p1:array[0..238] of char;//这里
begin
ms := TMemoryStream.Create ;
ms.loadfromFile('e:\temp\65b.txt');
l:=ms.Size;
ms.read(p1,238); //这里
for iftt:=0 to l-1 do
p1[iftt]:=char(byte(p1[iftt]) xor $55);
p1[l]:=chr(0);
ms.free;
p:=p1;
listbox1.Items.Add(p);
end;
如果,你的65.txt中中文,那么,65b.txt用记事本打开为乱码,但可用程序读出
(程序执行必须按button1->2->3)
procedure TForm1.Button3Click(Sender: TObject); //解密读文件