如何将一个指定文件夹下的所有文件剪切到另一个指定文件夹

时间:2021-12-17 05:49:34
我用system调用move经常不成功,看到dos窗口闪了一下,但没实际效果。而且system调用我觉得也是下策。

有什么好的方法或者函数能实现呢?谢谢。

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


引用 2 楼 iceflowergg 的回复:
妖哥老大,我照搬过来新建个测试程序,执行效果无效啊。是不是还少了什么?


你的代码是如何写的,贴出来。

#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下有两个文件。

#7


:SHFileOperation(&op);
后面加一句:
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了。多谢妖哥老大。

#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


引用 2 楼 iceflowergg 的回复:
妖哥老大,我照搬过来新建个测试程序,执行效果无效啊。是不是还少了什么?


你的代码是如何写的,贴出来。

#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下有两个文件。

#7


:SHFileOperation(&op);
后面加一句:
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了。多谢妖哥老大。

#10


学习了,大牛就是大牛