利用SHFileOperation实现支持通配符*,?的文件删除、拷贝、移动等。在vc6.0下测试通过。
//------------------------------------------------------------------------------
//删除某目录下的文件,不删除子目录文件,不放回回收站,支持通配符*、?,例如:SH_DeleteFileOrDirectory("c:\\data\\1??.*");
//删除所有文件夹及文件,不放回回收站,例如:SH_DeleteFileOrDirectory("c:\\data");
bool SH_DeleteFileOrDirectory(char *strFileName)
{
int nLength = strlen(strFileName);
char *strSrc = new char[nLength+2];
strcpy(strSrc,strFileName);
strSrc[nLength+1] = '\0';
SHFILEOPSTRUCT FileOp={0};
FileOp.hwnd=NULL;
FileOp.wFunc=FO_DELETE;
FileOp.pFrom=strSrc;
FileOp.pTo=NULL;
FileOp.fFlags=FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT;//不确认,没有错误提示,不显示进度对话框
//FOF_ALLOWUNDO //允许放回回收站
FileOp.hNameMappings=NULL;
FileOp.lpszProgressTitle=NULL;
bool ret = SHFileOperation(&FileOp) == 0;
delete []strSrc;
return ret;
}
//------------------------------------------------------------------------------
//拷贝所有文件和文件夹,例如:SH_CopyFileOrDirectory("d:\\data","c:\\data);
//拷贝某目录下的文件,支持通配符*、?,例如:SH_CopyFileOrDirectory("c:\\data\\1??.*","d:\\data");
bool SH_CopyFileOrDirectory(char *pFrom, char *pTo)
{
int LenFrom=strlen(pFrom);
int LenTo =strlen(pTo);
char *FromBuf = new char[LenFrom+2];
char *ToBuf = new char[LenTo+2];
strcpy(FromBuf,pFrom);
strcpy(ToBuf,pTo);
FromBuf[LenFrom+1]=0;
ToBuf[LenTo+1]=0;
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags = FOF_NOCONFIRMATION | //不出现确认对话框
FOF_NOCONFIRMMKDIR ; //需要时直接创建一个文件夹,不需用户确定
FileOp.pFrom = FromBuf;
FileOp.pTo = ToBuf;
FileOp.wFunc = FO_COPY;
bool ret = SHFileOperation(&FileOp) == 0;
delete[] FromBuf;
delete[] ToBuf;
return ret;
}
//------------------------------------------------------------------------------
//移动所有文件及文件夹,例如:SH_MoveFileOrDirectory("d:\\data","c:\\data);
//移动某目录下的文件,支持通配符*、?,例如:SH_MoveFileOrDirectory("c:\\data\\1??.*","d:\\data");
bool SH_MoveFileOrDirectory(char *pFrom, char *pTo)
{
int LenFrom=strlen(pFrom);
int LenTo =strlen(pTo);
char *FromBuf = new char[LenFrom+2];
char *ToBuf = new char[LenTo+2];
strcpy(FromBuf,pFrom);
strcpy(ToBuf,pTo);
FromBuf[LenFrom+1]=0;
ToBuf[LenTo+1]=0;
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags = FOF_NOCONFIRMATION| //不出现确认对话框
FOF_NOCONFIRMMKDIR ; //需要时直接创建一个文件夹,不需用户确定
FileOp.pFrom = FromBuf;
FileOp.pTo = ToBuf;
FileOp.wFunc = FO_MOVE;
bool ret = SHFileOperation(&FileOp) == 0;
delete[] FromBuf;
delete[] ToBuf;
return ret;
}
//------------------------------------------------------------------------------
//重命名文件或文件夹,不支持通配符,例如:SH_ReNameFile("c:\\data","c:\\data01");
bool SH_ReNameFile(char *pFrom, char *pTo)
{
int LenFrom=strlen(pFrom);
int LenTo =strlen(pTo);
char *FromBuf = new char[LenFrom+2];
char *ToBuf = new char[LenTo+2];
strcpy(FromBuf,pFrom);
strcpy(ToBuf,pTo);
FromBuf[LenFrom+1]=0;
ToBuf[LenTo+1]=0;
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags = FOF_NOCONFIRMATION; //不出现确认对话框
FileOp.pFrom = FromBuf;
FileOp.pTo = ToBuf;
FileOp.wFunc = FO_RENAME;
bool ret = SHFileOperation(&FileOp) == 0;
delete[] FromBuf;
delete[] ToBuf;
return ret;
}
//------------------------------------------------------------------------------