嗯,我是c +的新手,所以我决定在一些项目之后做一些简单的事情,让我对c ++有一个基本的了解(不,你不知道你好的世界),我只想做一个%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:identifier not found”,我已经包含了STDDEF.h,错误代码没有改变!但我不确定代码本身是否会起作用......
答案 0 :(得分: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
}
答案 1 :(得分:0)
通常,您需要包含Strsafe.h才能使用StringCchCat
请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms647518(v=vs.85).aspx
使用StringCchCat的问题就是源缓冲区(appdata)可能不足以容纳appdaa和文件夹。通过将LPCSTR转换为std :: string并将字符串一起添加(参见How do I convert from LPCTSTR to std::string?),然后在需要const char *时调用string.c_str(),可以让自己的生活更轻松。