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

时间:2010-11-26 04:50:12

标签: visual-c++ mfc

如何检查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); 

6 个答案:

答案 0 :(得分:22)

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

if (GetFileAttributes(newPath) == INVALID_FILE_ATTRIBUTES) {
  CreateDirectory(newPath,NULL);
}

请注意,即使由于某些其他原因导致该函数失败(例如无权访问该文件),该函数也将返回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
  }
}

答案 1 :(得分:2)

PathIsDirectory()怎么样?在原始示例中,您可以使用PathRemoveFilespec()后跟PathCombine()添加新的文件名/扩展名。在不太可能的情况下,您的目标只是Windows 8或更高版本,这些功能有更安全的PathCch...()风格。

答案 2 :(得分:1)

我使用PathFileExists。

答案 3 :(得分:0)

FindFirstFile。尽管名称中有“文件”,但它可以很好地找到目录。

答案 4 :(得分:0)

您可以在C运行时使用_accees或_waccess。 This is the msdn page and you can see sample usage 而且你也不必知道目录是否已经存在,因为CreateDirectory会检查并返回ERROR_ALREADY_EXISTS(如果存在)。 You can see from here (Return Codes).

答案 5 :(得分:0)

我必须注意,当文件是网络路径时,GetFileAttributes工作缓慢。 实际上,它第一次运行缓慢,之后很快。