【发布时间】:2021-11-17 11:00:53
【问题描述】:
我正在尝试在 Documents 文件夹中创建一个目录或子目录。
PWSTR ppszPath; // variable to receive the path memory block pointer.
HRESULT hr = SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &ppszPath);
std::wstring myPath;
if (SUCCEEDED(hr)) {
myPath = ppszPath; // make a local copy of the path
}
const wchar_t* str = myPath.c_str();
_bstr_t b(str);
int status = _mkdir(b+"\\New");
如您所见,我正在尝试在 Documents 文件夹中创建一个名为“New”的新文件夹。 文档路径正确,但未创建目录。
【问题讨论】:
-
题外话了,但是...为什么要经历所有这些而不是简单地使用
std::filesystem::create_directory? -
首先你的代码有一些代码味道。就像你只设置
myPath如果SUCCEEDED(hr)返回true。但函数的其余部分以任何一种方式执行。所以也许SHGetKnownFolderPath没有成功,因此其余代码在一个空字符串上操作。 -
我会更改的,谢谢,文档路径已显示,我尝试在调试模式下显示它
-
另一件可能不太理想的事情是使用两个不同的字符串类
std::wstring和_bstr_t。您可能只需要一个并且可以删除另一个。 -
我也用谷歌搜索了
_mkdir。_mkdir的参数不是_bstr_t而是const char *。但你最初有一个const wchar_t *,因此你可能应该使用_wmkdir。同时放弃_bstr_t,只使用wstring。写str += L"\\New";,后跟int status = _wmkdir(str.c_str());。
标签: c++