我在 C++ Builder 中编写此代码以将一些文件夹从安装在 x: 上的网络文件夹(例如 x:\games\foldername)复制到本地路径:d:\program files。我使用 shfileopstruct 如下。
源路径(s 变量)是使用 FieldByName("path") 从数据库中获取的,然后给它一个前缀("x:\games\" 和 MSDN 建议的 "\0" 。 SHFILEOPERATION 可以正常工作。 . 但不同寻常的是,当我删除有关 ShowMessage(path) 的代码(我有用于验证)时,SHFILEOPERATION 确实失败了。
对此有什么建议吗?我错过了什么吗?我很感激你的帮助,因为我没有经验。提前致谢。
UnicodeString s=""; //source path
UnicodeString d=""; //destination
UnicodeString path=""; //path from database field
if(ClientDataSet1->Active==false)
ClientDataSet1->Open();
path=ClientDataSet1->FieldByName("path")->Text; //get [path] value from db
ShowMessage(path); /// !!!! <<<-------- ??? SHOWMESSAGE ???
s="x:\\games\\" + path + "\0" ;
d="d:\\program files\0" ;
// Create the SHFILEOPSTRUCT and zero it.
SHFILEOPSTRUCT fos;
memset(&fos, 0, sizeof(fos));
fos.hwnd = Handle;
fos.wFunc = FO_COPY;
fos.pFrom = s.c_str();
fos.pTo = d.c_str();
fos.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMMKDIR;
int n=SHFileOperation(&fos);
if(n)
ShowMessage(n);
else
ShowMessage("OK");