最近开发ocr系统,发现文件夹操作是一个看似很简单但却很头痛的事情:
还好有SHFILEOPSTRUCT这个结构体,下面是删除和拷贝文件夹的两个函数,
void DeleteFolder(CStringW lpszPath)
{SHFILEOPSTRUCT FileOp;
ZeroMemory((void*)&FileOp, sizeof(SHFILEOPSTRUCT));
FileOp.fFlags = FOF_NOCONFIRMATION;
FileOp.hNameMappings = NULL;
FileOp.hwnd = NULL;
FileOp.lpszProgressTitle = NULL;
FileOp.pFrom = lpszPath;
FileOp.pTo = NULL;
FileOp.wFunc = FO_DELETE;
SHFileOperation(&FileOp) == 0;
}
void folderMove(CStringW origPath, CStringW goalPath)
{
SHFILEOPSTRUCT fop;
ZeroMemory(&fop, sizeof fop);
fop.wFunc = FO_COPY;
origPath += '\0';
goalPath += '\0';
fop.pFrom = origPath;
fop.pTo = goalPath;
SHFileOperation(&fop);
}
hwnd是Window 句柄,wFunc可以取值如下:
FO_COPY
FO_DELETE
FO_MOVE
FO_RENAME
分别对应着文件复制,删除,移动,重命名。pForm文件的路径,pTo一般取NULL
特别需要注意的是:
以下这种路径的方式,操作是正确的。
CStringW newPath0;
newPath0 = ".\\0\\*.bmp";
newPath0 += '\0';
以下这种路径的方式,却是错误的。
CStringW newPath0;
newPath0 = ".\\0\\*.bmp\0";
还有就是这种操作方式支持通配符,可以删除指定文件夹下的所有文件。
在这里标记下,希望能帮到其他人。