获取文件或文件夹路径
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);
}
|