有什么好的方法或者函数能实现呢?谢谢。
10 个解决方案
#1
SHFILEOPSTRUCT op;
String strFrom = "C:\\111\\*.*\0", strTo = "c:\\222\0";
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = strFrom.c_str();
op.pTo = strTo.c_str();
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
// 需要注意的就是:op.pFrom及op.pTo需要一个\0字符,加上字符串本身的一个\0字符,也就是字符串需要以2个\0字符结尾
#2
妖哥老大,我照搬过来新建个测试程序,执行效果无效啊。是不是还少了什么?
#3
用MoveFileEx试试
BOOL MoveFileEx(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
DWORD dwFlags
);
#4
楼上的,我是要搬文件夹,而不是文件。用搬文件的方法太累了。
#5
你的代码是如何写的,贴出来。
#6
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SHFILEOPSTRUCT op;
String strFrom = "d:\\t2\\*.*\0", strTo = "d:\\t1\0";
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = strFrom.c_str();
op.pTo = strTo.c_str();
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
}
我在d盘有两文件夹t2 t1,t2下有两个文件。
{
SHFILEOPSTRUCT op;
String strFrom = "d:\\t2\\*.*\0", strTo = "d:\\t1\0";
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = strFrom.c_str();
op.pTo = strTo.c_str();
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
}
我在d盘有两文件夹t2 t1,t2下有两个文件。
#7
:SHFileOperation(&op);
后面加一句:
ShowMessage(SysErrorMessage(::GetLastError()));
看看提示什么。
后面加一句:
ShowMessage(SysErrorMessage(::GetLastError()));
看看提示什么。
#8
汗……“操作成功完成”,是不是跟我win7系统有关系?
#9
成功了。
char cFrom[128],cTo[128];
memset( cFrom,0,sizeof(cFrom) );
strcpy( cFrom,"d:\\t2\\*.*" );
memset( cTo,0,sizeof(cTo) );
strcpy( cTo,"d:\\t1" );
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = cFrom;
op.pTo = cTo;
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
貌似必须是char*赋值过去。而且cForm\cTo之前没menset,拷贝的时候带两个\0都没用。加上了memset就ok了。多谢妖哥老大。
char cFrom[128],cTo[128];
memset( cFrom,0,sizeof(cFrom) );
strcpy( cFrom,"d:\\t2\\*.*" );
memset( cTo,0,sizeof(cTo) );
strcpy( cTo,"d:\\t1" );
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = cFrom;
op.pTo = cTo;
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
貌似必须是char*赋值过去。而且cForm\cTo之前没menset,拷贝的时候带两个\0都没用。加上了memset就ok了。多谢妖哥老大。
#10
学习了,大牛就是大牛
#1
SHFILEOPSTRUCT op;
String strFrom = "C:\\111\\*.*\0", strTo = "c:\\222\0";
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = strFrom.c_str();
op.pTo = strTo.c_str();
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
// 需要注意的就是:op.pFrom及op.pTo需要一个\0字符,加上字符串本身的一个\0字符,也就是字符串需要以2个\0字符结尾
#2
妖哥老大,我照搬过来新建个测试程序,执行效果无效啊。是不是还少了什么?
#3
用MoveFileEx试试
BOOL MoveFileEx(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
DWORD dwFlags
);
#4
楼上的,我是要搬文件夹,而不是文件。用搬文件的方法太累了。
#5
你的代码是如何写的,贴出来。
#6
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SHFILEOPSTRUCT op;
String strFrom = "d:\\t2\\*.*\0", strTo = "d:\\t1\0";
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = strFrom.c_str();
op.pTo = strTo.c_str();
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
}
我在d盘有两文件夹t2 t1,t2下有两个文件。
{
SHFILEOPSTRUCT op;
String strFrom = "d:\\t2\\*.*\0", strTo = "d:\\t1\0";
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = strFrom.c_str();
op.pTo = strTo.c_str();
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
}
我在d盘有两文件夹t2 t1,t2下有两个文件。
#7
:SHFileOperation(&op);
后面加一句:
ShowMessage(SysErrorMessage(::GetLastError()));
看看提示什么。
后面加一句:
ShowMessage(SysErrorMessage(::GetLastError()));
看看提示什么。
#8
汗……“操作成功完成”,是不是跟我win7系统有关系?
#9
成功了。
char cFrom[128],cTo[128];
memset( cFrom,0,sizeof(cFrom) );
strcpy( cFrom,"d:\\t2\\*.*" );
memset( cTo,0,sizeof(cTo) );
strcpy( cTo,"d:\\t1" );
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = cFrom;
op.pTo = cTo;
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
貌似必须是char*赋值过去。而且cForm\cTo之前没menset,拷贝的时候带两个\0都没用。加上了memset就ok了。多谢妖哥老大。
char cFrom[128],cTo[128];
memset( cFrom,0,sizeof(cFrom) );
strcpy( cFrom,"d:\\t2\\*.*" );
memset( cTo,0,sizeof(cTo) );
strcpy( cTo,"d:\\t1" );
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = cFrom;
op.pTo = cTo;
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
貌似必须是char*赋值过去。而且cForm\cTo之前没menset,拷贝的时候带两个\0都没用。加上了memset就ok了。多谢妖哥老大。
#10
学习了,大牛就是大牛