如何检查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);
答案 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工作缓慢。 实际上,它第一次运行缓慢,之后很快。