再送50大洋,求教API:shfileoperation用法(50分)

  • 主题发起人 主题发起人 canna
  • 开始时间 开始时间
C

canna

Unregistered / Unconfirmed
GUEST, unregistred user!
; 使用shfileoperation(),其参数pfrom设置以'd:/tmp/customer.db'
形式,正常。而以directorylistbox1+'/'+filelistbox1.items[mi]
形式赋值,则出现无法打开文件错误。这可能是c与delphi字符串的区别
造成的,如何解决。
 
老兄:
是你的笔误还是什么。
该是 DirectoryListBox1.Directory+'/'+FileListBox1.Items[2] 吧!
正常来说,不会出现这种问题的,你可以在调用前用showmessage看看那个串是否是
你想要的。
 
不是笔误。我是用mi变量从0到filelistbox1的item数,copy filelistbox中
列出的所有文件。showmessage的路径和文件名也是正确的。
如'c:/temp/abc.txt'。
 
;fl := TFileStream.create(
directorylistbox1.Directory+'/'+filelistbox1.items[0],
fmOpenRead Or fmShareDenyNone );
我用上句试过,没错
 
我想你可能把编译开关Huge strings关掉了(project -> option ->compiler)
在这种情况下,用的试ShortString,这样使用的是PASCAL格式的String,
如你一定要关掉该选项,请用StrPCopy进行转换

var destStr : Array [0..100] Of Char;
...
StrPCopy( destStr,directorylistbox1.Directory+'/'+filelistbox1.items[0]);
然后使用destStr, Good Luck:
 
在这儿我原样考了一份
----你说过要给我双倍分的哟!
:-))


我想我找到了正确答案:
关键在于:M$的文档说对于多个文件,每个文件名必须被#)字符分隔,而整个字符串
必须用两个#0结束。
所以我用以下例程就成功了: :-))

procedure TForm1.Button1Click(Sender: TObject);
var
shfo :TSHFileOpStruct;
from :string;
pstr :array [0..MAX_PATH-1] of char;
begin
FillChar(pstr,MAX_PATH,#0); //一定要加这句话哟!!
from := FileListbox1.FileName //我仅仅用一个文件测试了一下,你的
//程序原理是一样的
strpcopy(pstr,from); // !!!!
with shfo do
begin
wnd := Handle;
wFunc := FO_COPY;
pfrom := pstr;
pto := 'd:/temp';
fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
end;
if ShFileOperation(shfo) <> 0 then
ShowMessage('Failed')
else
ShowMessage('ok');
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
617
import
I
后退
顶部