VC中判断目录是否存在的方法

来源:互联网 发布:软件测试笔试题库 编辑:程序博客网 时间:2024/04/29 05:20

方法一、使用改变当前目录的函数

如果目录不存在,改变会出错。

int _chdir( const char *dirname );
int _wchdir( const wchar_t *dirname );

bool FolderIsExist(CString szPathName)

{

  CString szErrMsg = "";
  if(_wchdir(szPathName)) //changing the current working directory.
  {
   switch(errno)
   {
   case ENOENT:
    szErrMsg = "Unable to locate the directory: ";
    szErrMsg += szPathName;
    break;
   case EINVAL:
    szErrMsg = "Invalid buffer.";
    break;
   default:
    szErrMsg = "Unknown error.";
   }
  }

 

  if(szErrMsg != ""){

      MessageBox(szErrMsg, L"Error", MB_ICONERROR | MB_OK);

      return true;

  }

  else

      return false;
}

 

方法二、使用文件查找函数FindFirstFile

VC中文件的查找也包括目录,该函数如下:

HANDLE WINAPI FindFirstFile( __in   LPCTSTR lpFileName, __out  LPWIN32_FIND_DATA lpFindFileData );

其中,LPWIN32_FIND_DATA 为一结构:

typedef struct _WIN32_FIND_DATA {

  DWORD dwFileAttributes;

  FILETIME ftCreationTime;

  FILETIME ftLastAccessTime;

  FILETIME ftLastWriteTime;

  DWORD nFileSizeHigh;

  DWORD nFileSizeLow;

  DWORD dwReserved0;

  DWORD dwReserved1;

  TCHAR cFileName[MAX_PATH];

  TCHAR cAlternateFileName[14];
} WIN32_FIND_DATA,  *PWIN32_FIND_DATA,  *LPWIN32_FIND_DATA;

通过dwFileAttributes可判断查到的是否为目录,方法如下:

bool FolderIsExist(CString sPath)
{
     WIN32_FIND_DATA   wfd;
     BOOL bValue = FALSE;
     HANDLE hFile = FindFirstFile(sPath, &wfd);
     if ((hFile != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
     {
              bValue = TRUE;  
     }
     FindClose(hFile);
     return bValule;
}