利用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;
}
//------------------------------------------------------------------------------