1

好吧,我是 c++ 的新手,所以我决定在几个项目之后做一些简单的事情,这些项目让我对 c++ 有了基本的了解(不,hello world 不算在内),我只想在 % 上创建一个文件夹appdata% 我发现我只需要这样做

void MakeFolder()
{
LPCTSTR appdata = getenv("APPDATA");
char *appchar = getenv("APPDATA");
size_t sizeApp = sizeof(appchar) + 8;
LPCTSTR folder = "/Folder";
StringCchCat(appdata, sizeApp, folder);
CreateDirectory (appdata,NULL);
}

但它说“StringCchCat:未找到标识符”,我已经包含了 STDDEF.h,并且错误代码没有改变!但我不确定代码本身是否会起作用......

4

2 回答 2

4

StringCchCat声明在<strsafe.h>; 您需要包含该标题。

但是...因为您是 C++ 新手,所以不要乱用 C 字符串。使用std::string

char const* const raw_appdata = getenv("APPDATA");
if (raw_appdata == nullptr)
{
    // Handle error
}

std::string const appdata = raw_appdata;
std::string const folder  = appdata + "\\Folder";

if (CreateDirectory(appdata.c_str(), nullptr) == FALSE)
{
    // Handle error
}
于 2012-08-23T22:41:18.490 回答
0

通常,您需要包含 Strsafe.h 才能使用 StringCchCat

请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms647518(v=vs.85).aspx

以您的方式使用 StringCchCat 的问题是源缓冲区(appdata)可能不足以容纳 appdaa 和文件夹。您可以通过将 LPCSTR 转换为 std::string 并将字符串添加在一起(请参阅如何从 LPCTSTR 转换为 std::string?),然后在需要时调用 string.c_str()来让自己的生活变得更轻松一个常量字符*。

于 2012-08-23T22:44:01.847 回答