delphi 怎么将一个文件流转换成字符串(String到流,String到文件,相互转化)

//from   
http://kingron.myetang.com/zsfunc0d.htm   

(*//   
标题:充分利用pascal字符串类型   
说明:和PChar不同,string可以保存#0字符在其中;示例文件、内存流字符串之间转换   
设计:Zswang   
日期:2002-01-25   
支持:wjhu111@21cn.com   
//*)   

///////Begin   Source   
function   StringToFile(mString:   string;   mFileName:   TFileName):   Boolean;   
{   返回字符串保存到文件是否成功   }   
var   
vFileChar:   file   of   Char;   
I:   Integer;   
begin   
{$I-}   
AssignFile(vFileChar,   mFileName);   
Rewrite(vFileChar);   
for   I   :=   1   to   Length(mString)   do   Write(vFileChar,   mString[I]);   
CloseFile(vFileChar);   
{$I+}   
Result   :=   (IOResult   =   0)   and   (mFileName   <>   '');   
end;   {   StringToFile   }   

function   FileToString(mFileName:   TFileName):   string;   
{   返回从文件载入字符串   }   
var   
vFileChar:   file   of   Char;   
vChar:   Char;   
begin   
Result   :=   '';   
{$I-}   
AssignFile(vFileChar,   mFileName);   
Reset(vFileChar);   

while   not   Eof(vFileChar)   do   begin   
Read(vFileChar,   vChar);   
Result   :=   Result   +   vChar;   
end;   
CloseFile(vFileChar);   
{$I+}   
end;   {   FileToString   }   

function   StreamToString(mStream:   TStream):   string;   
{   将内存流转换成字符串   }   
var   
I:   Integer;   
begin   
Result   :=   '';   
if   not   Assigned(mStream)   then   Exit;   
SetLength(Result,   mStream.Size);   
for   I   :=   0   to   Pred(mStream.Size)   do   try   
mStream.Position   :=   I;   
mStream.Read(Result[Succ(I)],   1);   
except   
Result   :=   '';   
end;   
end;   {   StreamToString   }   

function   StringToStream(mString:   string;   mStream:   TStream):   Boolean;   
{   返回将字符串保存到内存流是否成功   }   
var   
I:   Integer;   
begin   
Result   :=   True;   
try   
mStream.Size   :=   0;   
mStream.Position   :=   0;   
for   I   :=   1   to   Length(mString)   do   mStream.Write(mString[I],   1);   
except   
Result   :=   False;   
end;   
end;   {   StringToStream   }   
///////End   Source   

///////Begin   Demo   
procedure   TForm1.Button1Click(Sender:   TObject);   
var   
vMemoryStream:   TMemoryStream;   
begin   
Memo1.Text   :=   FileToString('C:\WINDOWS\Desktop\1.txt');   
vMemoryStream   :=   TMemoryStream.Create;   
try   
Memo1.Lines.SaveToStream(vMemoryStream);   
Memo2.Text   :=   StreamToString(vMemoryStream);   
finally   
vMemoryStream.Free;   
end;   
end;   

procedure   TForm1.Button2Click(Sender:   TObject);   
var   
vMemoryStream:   TMemoryStream;   
begin   
StringToFile(Memo2.Text,   'C:\WINDOWS\Desktop\1.txt');   
vMemoryStream   :=   TMemoryStream.Create;   
try   
StringToStream(Memo2.Text,   vMemoryStream);   
vMemoryStream.Position   :=   0;   
Memo1.Lines.LoadFromStream(vMemoryStream);   
finally   
vMemoryStream.Free;   
end;   
end;   
///////End   Demo  

http://www.delphitop.com/html/zifuchuan/1711.html

posted @   findumars  Views(5542)  Comments(0Edit  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2015-03-07 if语句写在while语句外面效率更高
点击右上角即可分享
微信分享提示