您的位置:首页 > 运维架构

VC 移动,复制,删除文件(SHFileOperation)时显示动画

2012-04-05 15:58 429 查看
比较乱 凑合看吧

(转载于:http://hi.baidu.com/%B4%E7%B2%DD%D0%C4_/blog/item/e3a8200a28f6ea3ab1351d38.html)

总结一下SHFileOperation的用法,希望对大家有用

//删除文件或者文件夹
bool DeleteFile(char * lpszPath)

{

SHFILEOPSTRUCT FileOp={0};

FileOp.fFlags = FOF_ALLOWUNDO |   //允许放回回收站

      FOF_NOCONFIRMATION; //不出现确认对话框

FileOp.pFrom = lpszPath;

FileOp.pTo = NULL;      //一定要是NULL

FileOp.wFunc = FO_DELETE;    //删除操作

return SHFileOperation(&FileOp) == 0;

}

//复制文件或文件夹
bool CopyFile(char *pTo,char *pFrom)

{

SHFILEOPSTRUCT FileOp={0};

FileOp.fFlags = FOF_NOCONFIRMATION|   //不出现确认对话框

      FOF_NOCONFIRMMKDIR ; //需要时直接创建一个文件夹,不需用户确定

FileOp.pFrom = pFrom;

FileOp.pTo = pTo;

FileOp.wFunc = FO_COPY;

return SHFileOperation(&FileOp) == 0;

}

//移动文件或文件夹

bool MoveFile(char *pTo,char *pFrom)

{

SHFILEOPSTRUCT FileOp={0};

FileOp.fFlags = FOF_NOCONFIRMATION|   //不出现确认对话框

      FOF_NOCONFIRMMKDIR ; //需要时直接创建一个文件夹,不需用户确定

FileOp.pFrom = pFrom;

FileOp.pTo = pTo;

FileOp.wFunc = FO_MOVE;

return SHFileOperation(&FileOp) == 0;   

}

//从命名文件或文件夹

bool ReNameFile(char *pTo,char *pFrom)

{

SHFILEOPSTRUCT FileOp={0};

FileOp.fFlags = FOF_NOCONFIRMATION;   //不出现确认对话框

FileOp.pFrom = pFrom;

FileOp.pTo = pTo;

FileOp.wFunc = FO_RENAME;

return SHFileOperation(&FileOp) == 0;   

}

应用举例:

DeleteFile("d:\\PID\0\0");    //删除一个文件夹

DeleteFile("d:\\PID.dsp\0d:\\PID.dsw\0\0"); //删除多个文件

CopyFile("d:\0\0","D:\\MyProjects\\临时程序\0\0");    //把"临时程序"文件夹放到d盘下面

CopyFile("d:\0\0","D:\\MyProjects\\临时程序\\PID.dsp\0D:\\MyProjects\\临时程序\\PID.dsw\0");
//把PID.dsp和PID.dsw俩个文件放到d盘下面

ReNameFile("d:\\NewName","d:\\PID\0\0"); \\把PID文件夹从命名为NewName

注意:,如果你想把"D:\\MyProjects\\临时程序\0\0"的文件夹复制到D盘下,并从命名为NewName,应该这样

CopyFile("d:\\NewName\0\0","D:\\MyProjects\\临时程序\\*.*\0\0"); //把"临时程序"文件夹复制到d盘下并从命名为"NewName"  

 

下面这个类方便你复制多个文件或文件夹,仅作参考

//连接多个路径的类

class JOINFILEPATH

{

private:

int pos;

char* MultipleFilePath;

public:

JOINFILEPATH()

{

   pos=0;

   MultipleFilePath=new char[MAX_PATH*10];

   memset(MultipleFilePath,0,MAX_PATH*10);

}

~JOINFILEPATH() { delete []MultipleFilePath; }

void join(char *FilePath)

{

   while(*FilePath!='\0')

    MultipleFilePath[pos++]=*FilePath++;

   pos++;

}

char * GetMultipleFilePath() {return MultipleFilePath;}

};

//应用举例:

JOINFILEPATH FilePath;

FilePath.join("D:\\MyProjects\\临时程序\\PID\\PID.dsp");

FilePath.join("D:\\MyProjects\\临时程序\\PID\\PID.dsw");

CopyFile("d:\0\0",FilePath.GetMultipleFilePath());

1 pFrom和pTo最好以\0\0结尾(把存放路径的字符串初始化为0),不然有可能会出错,中间的每一个路径用\0隔开

2 pFrom所指向的文件或文件夹(可以多个)会被复制或移动到pTo所指向的文件夹下面(假如文件夹不存在会询问是否创建,当然你也可以选择直接创建)


参数详解:

Typedef struct _ShFILEOPSTRUCT

{

HWND hWnd; //消息发送的窗口句柄;

UINT wFunc; //操作类型

LPCSTR pFrom; //源文件及路径

LPCSTR pTo; //目标文件及路径

FILEOP_FLAGS fFlags; //操作与确认标志

BOOL fAnyOperationsAborted; //操作选择位

LPVOID hNameMappings; //文件映射

LPCSTR lpszProgressTitle; //文件操作进度窗口标题

}SHFILEOPSTRUCT, FAR * LPSHFILEOPSTRUCT;

  在这个结构中,hWnd是指向发送消息的窗口句柄,pFrom与pTo是进行文件操作的源文件名和目标文件名,它包含文件的路径,对应单个文件的路径字符串,或对于多个文件,必须以NULL作为字符串的结尾或文件路径名之间的间隔,否则在程序运行的时候会发生错误。另外,pFrom和pTo都支持通配符*和?,这大大方便了开发人员的使用。例如,源文件或目录有两个,则应是:char pFrom[]="d:\\Test1\0d:\\Text.txt\0",它表示对要D:盘Test目录下的所有文件和D:盘上的Text.txt文件进行操作。字符串中的"\"是C语言中的'\'的转义符,'\0'则是NULL。wFunc
是结构中的一个非常重要的成员,它代表着函数将要进行的操作类型,它的取值为如下:

  FO_COPY: 拷贝文件pFrom到pTo 的指定位置。

  FO_RENAME: 将pFrom的文件名更名为pTo的文件名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: