有关文本文件和二进制文件的问题,大家进来看看

pzh508 2006-06-15 04:21:35
我有一个文本文件,现在我想将其读出来保存为二进制文件,然后再程序中再读取该二进制文件,请问该如何做到?我使用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;
但是却怎么也读取不了,老是出错,请各位大侠看看问题出在那里
...全文
371 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2006-07-10
  • 打赏
  • 举报
回复
注释有一小错:
procedure TForm1.Button3Click(Sender: TObject); //解密读文件
柯本 2006-07-10
  • 打赏
  • 举报
回复
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,再保存
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)
柯本 2006-07-10
  • 打赏
  • 举报
回复
那你就要用某种方式加密(如xor等)
pzh508 2006-07-10
  • 打赏
  • 举报
回复
to h2yang(小青)
你说的是什么意思呢?如果我想将文本内容写入二进制文件里,但又不想给用户直接可以打开记事本观看,那该怎么做呢?
pzh508 2006-06-16
  • 打赏
  • 举报
回复
谢谢楼上兄弟的回答,我改成ms.Write(pchar(t)^,length(t))确实没有问题,但是为什么这样保存以后我用记事本打开那个文件,竟然可以看到文件的内容的?一般二进制文件用记事本打开看到的是乱码的啊,难道用tmemorystream来写的二进制是可以观察到的吗?怎样解决这个问题?大侠帮帮忙,不胜感激
h2yang 2006-06-16
  • 打赏
  • 举报
回复
你的内容本来就是可见字符啊,如果把1写成chr(1),再写入文件,你看记事本还能不能看?
柯本 2006-06-15
  • 打赏
  • 举报
回复
这个问题我回过多次了,string是指针,不能直接写入文件或从文件中读的,这样可以,在//这里
的地方是我改过的
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;

16,741

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧