当前位置:  -> 首页 -> VC++文件操作API详解

上一篇 | 下一篇
VC++文件操作API详解
作者:洛羽叶  点击率:5049  发布时间:2012-12-05
 获取文件或文件夹路径
 void GetPath(char* fileName,char* path)
 {
          
char bufDrive[16]={''};
          
char bufPath[MAX_PATH_LENGTH]={''};
  
          ::_splitpath(fileName,bufDrive,bufPath,
NULL,NULL);
          
if(*(bufPath+strlen(bufPath)-1)=='\')
                    *(bufPath+strlen(bufPath)-1)='';
          sprintf(path,
"%s%s",bufDrive,bufPath);
 }
  
 获取文件名
 
long GetFileName(char* fullFileName,char* fileName)
 {
          
char bufDrive[16]={''};
          
char bufPath[MAX_PATH_LENGTH]={''};
          
char bufFileName[MAX_PATH_LENGTH]={''};
          
char bufExtName[256]={''};
          
long n=0;
  
          ::_splitpath(fullFileName,bufDrive,bufPath,bufFileName,bufExtName);
          sprintf(fileName,
"%s%s",bufFileName,bufExtName);
          n=strlen(fileName);
  
          
return n;
 }
  
 文件是否存在
 
bool FileExist(char* fileName)
 {
          ::WIN32_FIND_DATAA fd;
          HANDLE hFind=
NULL;
          
bool bResult=false;
  
          hFind = ::FindFirstFileA(fileName,&fd);
          
if (hFind != INVALID_HANDLE_VALUE && !(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))   
                    bResult=
true;          
          
if (hFind != INVALID_HANDLE_VALUE)
                    ::FindClose(hFind);                    
  
          
return bResult;
 }
  
 文件夹是否存在
 
bool FolderExist(char* folderName)
 {
          ::WIN32_FIND_DATAA fd;
          HANDLE hFind=
NULL;
          
bool bResult=false;
          
char buf[MAX_PATH_LENGTH]={""};
  
          strcpy(buf,folderName);
          
if(*(buf+strlen(buf)-1)=='\')
                    *(buf+strlen(buf)-1)='';
  
          hFind = ::FindFirstFileA(buf,&fd);
          
if (hFind != INVALID_HANDLE_VALUE && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))     
                    bResult=
true
          
if (hFind != INVALID_HANDLE_VALUE)
                    ::FindClose(hFind);           
  
          
return bResult;
 }
  
 递归创建目录
 
bool CreateDirectory(char* folderName)
 {
          
bool bResult=false;
          
char szPath[MAX_PATH_LENGTH]={0};
         
          strcpy(szPath,folderName);
          
if(*(szPath+strlen(szPath)-1)=='\')
                    *(szPath+strlen(szPath)-1)='';
          GetPath(szPath,szPath);
         
          
if(!FolderExist(szPath))
                    CreateDirectory(szPath);
          
if(!FolderExist(folderName))
                    bResult=(::CreateDirectoryA(folderName,
NULL)==TRUE);   
  
          
return bResult;
 }
  
  
 获取文件长度
 
long long GetFileSize(char* szFile)
 {
          
long long size=0;
          HANDLE hFile=
NULL;
  
          
if (FileExist(szFile))
          {
                    hFile=::CreateFileA(szFile,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);                           
                    ::GetFileSizeEx(hFile,(PLARGE_INTEGER)&size);
                    ::CloseHandle(hFile);                         
          }
  
          
return size;
 }
  
  
 删除文件夹,包括子目录和文件
 
void DeleteFolderEx(char* szFolder, bool recursive)
 {       
          
char path[MAX_PATH_LENGTH]={0};
          SHFILEOPSTRUCT FileOp;
          
bool bResult=false;
  
          strcpy(path,szFolder);
          ZeroMemory((
void*)&FileOp,sizeof(SHFILEOPSTRUCT));
          FileOp.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | (recursive ? ~FOF_NORECURSION : FOF_NORECURSION);
          FileOp.hNameMappings = 
NULL;
          FileOp.hwnd = 
NULL;
          FileOp.lpszProgressTitle = 
NULL;
          FileOp.pFrom = path;
          FileOp.pTo = 
NULL;
          FileOp.wFunc =FO_DELETE; 
  
          bResult=(SHFileOperation(&FileOp)==
0);
 }

标签: CreateFile _splitpath GetFileSizeEx C++
引用地址:本站原创
   站点首页      技术人生      旅途足迹      我要留言      友情链接      关于站长   
[本站统计]
在线人数:23
今日访问:103
总访问量:1936596
Copyright 2006-2022 EasyWeb 1.6 订阅 All Rights Reserved
粤ICP备08028977号-1
www.luoriver.com
Created by WWH in 2006