关于TMemoryStream的LoadFromFile方法。 (50分)

  • 主题发起人 主题发起人 whaoye
  • 开始时间 开始时间
W

whaoye

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi中是这个样子说明的:

procedure LoadFromFile(const FileName: string);

但是,我注意到这里的filename是一个const,
如果只是打开一个已经知道的文件好办,
比如,如果是读c:/windows/explorer.exe
可以直接如下:

var
mystream:tmemorystream;
begin
mystream:=tmemorystream.create;
try
mystream.loadfromfile('c:/windows/explorer.exe');
.....
finally
mystream.free;
end;

但是,有的时候,我们需要读取一个变量,
我改写了一下:

var
mystream:tmemorystream;
filepath:string;
begin
filepath:=listview1.items.item[0].subitems.caption;
//showmessage(filepath)将弹出正确的地址
mystream:=tmemorystream.create;
try
mystream.loadfromfile(filepath);
.....
finally
mystream.free;
end;

但是,这个时候就出错了,
因为我给他穿了一个var而不是const
我该怎么办呢?
请高手赐教。

 
不会有问题,
如果有问题的话,应该是
.....
这部分出了毛病
 
照你的代码没问题呀!?
你那里出的什么错?
 
不会出错的。const表示参数值不会被函数修改。
 
但是我设置断点,就是到这里就不行了,
提示Cant not openfile c:/windows/explorer.exe
但是,如果按照第一个程序就不会出错。并且达到预期的效果,
为什么呢?
好奇怪啊。
 
那是你要打开的文件不存在!
确保你的文件路径正确!
 
.....
这个部分绝对没有问题,就算我不写这部分代码,也会出错。
 
文件路径也绝对正确,
我在这里说的c:/windows/explorer.exe只是一个比方,
其实,是这个样子的,
我在写一个eml发送软件,
我用一个listview来保存要发送的附件的文件名以及地址,
这个地址通过opendialog来返回,
应该是不会错啊。
 
只要我把loadfrom的参数换成一个存在的文件路径,
就可以达到我的预期效果,
而用变量就不行,真不知道是为什么。
 
不能打开的原因可能是正在使用,并且被锁了,先换个文件名试试
 
哎呀,刚才这个地方写错了,

var
mystream:tmemorystream;
filepath:string;
begin
filepath:='c:/windows/explorer.exe';
mystream:=tmemorystream.create;
try
mystream.loadfromfile(filepath);
.....
finally
mystream.free;
end;
这个样子不出错,
如果是这个样子就出错:
var
mystream:tmemorystream;
filepath:string;
begin
filepath:=listview1.items.item[0].subitems.caption;
//showmessage(filepath)将弹出正确的地址
mystream:=tmemorystream.create;
try
mystream.loadfromfile(filepath);
.....
finally
mystream.free;
end;
 
沒有問題,
const說明的只是在Procedure 中不能給FileName賦值
 
filepath:=listview1.items.item[0].subitems.caption;
这可能有两种原因:1.你没有指定这个文件的完整的Path
2.你的原文件在使用等!
其它或者是你的程序本身有问题!
 
哎呀,我自己发现了,是因为listview.items[0].subitem.text后面有一个#13#10
如果直接showmessage当然看不出来,
但是,如果做为filepath,显然是不能有#13#10的。
我去掉最后面的两个字符就可以了。
 
后退
顶部