vc 支持通配符的文件删除

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

参考: VC下的目录文件的复制.(SHFileOperation)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值