可能重复:
c++ 如何从路径创建目录
我正在尝试在应用程序数据文件夹中创建一个 .ini 文件,以便我可以使用设置。我试了一下,但我不知道如何检查它是否已经存在,如果不存在,则创建子目录和 .ini 文件。
当我收到最后一条错误消息时,它显示“系统找不到指定的路径”。
#include <string>
using namespace std;
#include <Windows.h>
#include <Shlwapi.h>
#include <ShlObj.h>
#pragma comment(lib, "shlwapi.lib")
namespace Settings
{
CIni Ini;
bool Available = false;
char Directory[MAX_PATH];
const char *IniFileName = "Settings.ini";
void CheckError() {
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL
);
string msg = (LPTSTR)lpMsgBuf;
Error(msg); // MessageBox
}
void Initialize() {
// Get AppData directory
if (SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, 0, Directory) >= 0) {
string fullpath;
string subDir = "\\MyCompany\\MyProgram\\1.0\\";
PathAppend(Directory, subDir.c_str());
fullpath = Directory;
fullpath += IniFileName;
// If directory doesn't exist, create it.
DWORD attrib = GetFileAttributes(Directory);
if (!(attrib != INVALID_FILE_ATTRIBUTES && (attrib & FILE_ATTRIBUTE_DIRECTORY))) {
if (CreateDirectory(Directory, NULL)) {
HANDLE file = CreateFile(
fullpath.c_str(), GENERIC_WRITE, 0, 0,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
);
if (file != INVALID_HANDLE_VALUE) {
CloseHandle(file);
} else {
CheckError();
return;
}
} else {
CheckError();
return;
}
}
Ini.SetPathName(fullpath.c_str());
Available = true;
}
}
}
我检查了一下,我的电话CreateDirectory()
返回错误。如何检查文件和目录是否存在,如果不存在则创建它们?