当前位置: 主页 > 日志 > C/C++ >

MFC中关于文件的一些操作

最近写一个小程序,中间用到了一些对文件的相关操作,特记下来:

// 判断文件或目录是否存在
// 存在返回TRUE,反正返回FALSE
BOOL IsFileExist(CString csFilePath)
{
    CFileFind   find;  
    if(!find.FindFile(csFilePath)) return FALSE;  
    find.Close();
    return TRUE;
}

// 获取文件的后缀名(全小写)
CString GetFileExt(CString csFileName)
{
    CString csFileExt=csFileName.Right(csFileName.GetLength()-csFileName.ReverseFind(.));
    csFileExt.MakeLower();
    return csFileExt;
}


// 获取文件的大小(字节)
DWORD GetFileSize(CString csFilePath)
{
    WIN32_FIND_DATA wfd;
    HANDLE handle=NULL;
    memset(&wfd,0,sizeof(wfd));

    handle=FindFirstFile(csFilePath.GetBuffer(0),&wfd);
    if(handle==INVALID_HANDLE_VALUEreturn 0;
    FindClose(handle);
    
    return wfd.nFileSizeLow;

}

// 判断一个路径是文件还是目录
// 如果是文件则返回TEUE,否则返回FALSE
BOOL IsFile(CString csFilePath)
{
    WIN32_FIND_DATA wfd;
    HANDLE handle=NULL;
    memset(&wfd,0,sizeof(wfd));
    
    handle=FindFirstFile(csFilePath.GetBuffer(0),&wfd);
    if(handle==INVALID_HANDLE_VALUEreturn FALSE;
    FindClose(handle);

    if (FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
        return FALSE;
    else
        return TRUE;
}

// 调出浏览目录窗口
CString BrowseFolder()
{
    char   cDir[MAX_PATH]={0}; 
    CString csFolderPath="";

    BROWSEINFO   bi;  
    ITEMIDLIST   *pidl;  
    bi.hwndOwner  =  NULL;  
    bi.pidlRoot   =  NULL;  
    bi.pszDisplayName   =  cDir;  
    bi.lpszTitle   =  "浏览文件夹";  
    bi.ulFlags   =   BIF_RETURNONLYFSDIRS|BIF_DONTGOBELOWDOMAIN;  
    bi.lpfn   =   NULL;  
    bi.lParam   =   0;  
    bi.iImage   =   0;  
    pidl = SHBrowseForFolder(&bi);     
    if(pidl == NULL)   return   csFolderPath;  
    SHGetPathFromIDList(pidl, cDir);     
    csFolderPath=cDir;
    return csFolderPath;
}


// 目录复制
void NewMonitor::Copy_Dir(CString Source,CString Target)
{
    char cFrom[MAX_PATH]={0};
    char cDest[MAX_PATH]={0};

    CString csFrom=Source + "*.*";
    CString csDest=Target.Left(Target.GetLength()-1);

    strncpy(cFrom,csFrom.GetBuffer(0),min(csFrom.GetLength(),MAX_PATH));
    strncpy(cDest,csDest.GetBuffer(0),min(csDest.GetLength(),MAX_PATH));

    SHFILEOPSTRUCT   lpFileOp;  
    lpFileOp.hwnd=AfxGetMainWnd()->GetSafeHwnd();  
    lpFileOp.wFunc=FO_COPY;  
    lpFileOp.pFrom=cFrom;
    lpFileOp.pTo=cDest;
    lpFileOp.fFlags=FOF_SIMPLEPROGRESS;  
    lpFileOp.fAnyOperationsAborted=FALSE;  
    lpFileOp.hNameMappings =NULL;  
    lpFileOp.lpszProgressTitle =NULL;  

    SHFileOperation(&lpFileOp);    
}

// 遍历指定目录下的所有文件

 CFileFind finder;  
 BOOL  bWorking  = finder.FindFile(要遍历的目录+"\*.*");  
        
while(bWorking)  
 {  
    bWorking = finder.FindNextFile();  
    if(!finder.IsDirectory()) // 如果不是目录
   {      
                         // 处理
   }  
}


// 创建目录
// 使用一个Win32 Api即可
::CreateDirectory(szDirPath,NULL);

[日志信息]

该日志于 2009-05-03 10:33 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “MFC中关于文件的一些操作” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部