判断文件夹是否存在,及创建一个文件夹

时间:2021-05-26 21:39:08

判断指定位置是否存在已知名字的文件夹,若不存在,新建一个。VC 6.0下通过。

#include<iostream>
#include<windows.h>
#include <string.h>

using namespace std;

//判断一个文件夹是否存在,如果不存在则创建这个文件夹
bool DirExist(const TCHAR *pszDirName)
{
WIN32_FIND_DATA fileinfo;
TCHAR _szDir[_MAX_PATH];
strcpy(_szDir,pszDirName);
int nLen = strlen(_szDir);
if((_szDir[nLen-1] == '//') || (_szDir[nLen-1] == '/'))
{
_szDir[nLen-1] =(char) '/0';//zx
}
HANDLE hFind = ::FindFirstFile(_szDir,&fileinfo);
if(hFind == INVALID_HANDLE_VALUE)
{
return false;
}
if(fileinfo.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
::FindClose(hFind);
return true;
}
::FindClose(hFind);
return false;
}

bool CreateDir(const TCHAR *pszDirName)
{
bool bRet = false;
TCHAR _szDir[_MAX_PATH];
TCHAR _szTmp[_MAX_DIR];
int nLen = 0;
int idx;
if((DirExist(pszDirName)) == true)
return true;
strcpy(_szDir,pszDirName);
nLen = strlen(_szDir);
if(_szDir[nLen-1] == '//' || _szDir[nLen-1] == '/')
{
_szDir[nLen-1] = (char)'/0'; //zx
}
nLen = strlen(_szDir);
memset(_szTmp,0,_MAX_DIR);
TCHAR _str[2];
for(idx = 0;idx < nLen;idx++)
{
if(_szDir[idx] != '//')
{
_str[0] = _szDir[idx];
_str[1] = 0;
strcat(_szTmp,_str);
}
else
{
bRet = ::CreateDirectory(_szTmp,NULL);
if(bRet)
{
::SetFileAttributes(_szTmp,FILE_ATTRIBUTE_NORMAL);
}
_str[0] = _szDir[idx];
_str[1] = 0;
strcat(_szTmp,_str);
}
if(idx == nLen-1)
{
bRet = ::CreateDirectory(_szTmp,NULL);
if(bRet)
{
::SetFileAttributes(_szTmp,FILE_ATTRIBUTE_NORMAL);
}
}
}
if(DirExist(_szTmp))
return true;
return false;
}


int main()
{
char Dir[]="F:\\123";

if(false==DirExist("Dir"))//查看F盘下是否存在名为123的文件夹
{
cout<<"not find!"<<endl;
if(true==CreateDir(Dir))//创建123文件夹
cout<<"Create success!"<<endl;
else
cout<<"create failed!"<<endl;
}

else
cout<<"Find it !"<<endl;
system("pause");
return 0;
}