如何检查目录是否已存在于MFC(VC++)中?

Swa*_*pta 8 mfc visual-c++

如何检查目录是否已存在于MFC(VC++)中?我使用下面的代码来获取当前的应用程序路径,并在那里我创建NDSLog文件夹,以便我所有的日志文件应该放在那里,现在我想检查条件,如果NDSLog文件夹已经存在不创建它.如何做到这一点?

谢谢.

char strPathName[_MAX_PATH];
    ::GetModuleFileName(NULL, strPathName, _MAX_PATH);

    // The following code will allow you to get the path.
    CString newPath(strPathName);
    int fpos = newPath.ReverseFind('\\');

    if (fpos != -1)
    newPath = newPath.Left(fpos+1);     
    newPath += "NDSLog\\" ;

    CreateDirectory(newPath,NULL); 
Run Code Online (Sandbox Code Playgroud)

cas*_*nca 24

检查文件/目录是否存在的最简单方法是使用GetFileAttributes:

if (GetFileAttributes(newPath) == INVALID_FILE_ATTRIBUTES) {
  CreateDirectory(newPath,NULL);
}
Run Code Online (Sandbox Code Playgroud)

请注意,INVALID_FILE_ATTRIBUTES即使由于某些其他原因(例如无权访问该文件)而导致该函数失败,该函数也将返回,因此您应检查返回值CreateDirectory以确保其成功.

实际上,您不需要检查目录是否已存在; CreateDirectory如果目录已存在,将设置错误代码:

if (!CreateDirectory(newPath,NULL)) {
  if (GetLastError() == ERROR_ALREADY_EXISTS) {
    // directory already exists
  } else {
    // creation failed due to some other reason
  }
}
Run Code Online (Sandbox Code Playgroud)