C++/VC文件(夹)操作总结:拷贝、删除等

2012-02-16 20:38:23|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 文件操作|来源:唯设编程网

VC/C++编程时,经常需要进行文件和目录进行操作,比如文件/目录拷贝、文件/目录移动、文件/目录删除等,常用的方式包括调用API函数和向操作系统发送批处理命令,本文将各种文件操作方法进行归纳总结,以便于根据项目实际需要查阅。

方案一:调用VC/C++的API函数

进行文件/目录操作时,SHFileOperation的各种函数经常被使用,首先总结一下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");
//删除多个文件    
DeleteFile("d:PID.dspd:PID.dsw"); 
//把"临时程序"文件夹放到d盘下面
CopyFile("d:","D:MyProjects临时程序");    
//把PID.dsp和PID.dsw俩个文件放到d盘下面
CopyFile("d:","D:MyProjects临时程序临时程序PID.dsw");
//把PID文件夹从命名为NewName
ReNameFile("d:NewName","d:PID"); 

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

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

文件操作基本上可以直接调用SHFileOperation提供的各种函数,下面主要总结一下VC/C++编程时目录的拷贝、删除操作,目录的移动可以先拷贝,在删除源目录,在此不再赘述。

1、目录拷贝

1.1、在MFC环境中使用

/////////////////////////////////
//MFC版 目录拷贝
/////////////////////////////////
void FileCopyTo(CString source,
                CString destination,
                CString searchStr, BOOL cover = TRUE)
{
    CString strSourcePath = source;
    CString strDesPath = destination;
    CString strFileName = searchStr;
    CFileFind filefinder;
    CString strSearchPath = strSourcePath + "" + strFileName;
    CString filename;
    BOOL bfind = filefinder.FindFile(strSearchPath);

    CString SourcePath, DisPath;
    while (bfind)
    {
        bfind = filefinder.FindNextFile();
        filename = filefinder.GetFileName();
        SourcePath = strSourcePath + "" + filename;
        DisPath = strDesPath + "" + filename;
        CopyFile((LPCSTR)SourcePath, (LPCSTR)DisPath, cover);
    }
    filefinder.Close();
}
<12>
发表评论0条 】
网友评论(共?条评论)..
C++/VC文件(夹)操作总结:拷贝、删除等