#include "stdafx.h"
#include <string>
#include <windows.h>
using namespace std;
int main()
{
string FilePath = "C:\\Documents and Settings\\whatever";
CreateDirectory(FilePath, NULL);
return 0;
}
错误:错误C2664:'CreateDirectory':无法将参数1从'const char *'转换为'LPCTSTR'
答案 0 :(得分:1)
std::string
是一个包含基于char
的数据的类。要将std::string
数据传递给API函数,您必须使用其c_str()
方法获取指向字符串实际数据的char*
指针。
CreateDirectory()
需要TCHAR*
作为输入。如果定义了UNICODE
,则TCHAR
会映射到wchar_t
,否则会映射到char
。如果您需要坚持使用std::string
但又不想让代码UNICODE
知晓,那么请改用CreateDirectoryA()
,例如:
#include "stdafx.h"
#include <string>
#include <windows.h>
int main()
{
std::string FilePath = "C:\\Documents and Settings\\whatever";
CreateDirectoryA(FilePath.c_str(), NULL);
return 0;
}
要使此代码TCHAR
明白,您可以改为:
#include "stdafx.h"
#include <string>
#include <windows.h>
int main()
{
std::basic_string<TCHAR> FilePath = TEXT("C:\\Documents and Settings\\whatever");
CreateDirectory(FilePath.c_str(), NULL);
return 0;
}
然而,基于Ansi的OS版本已经很久了,现在一切都是Unicode。不应再在新代码中使用TCHAR
:
#include "stdafx.h"
#include <string>
#include <windows.h>
int main()
{
std::wstring FilePath = L"C:\\Documents and Settings\\whatever";
CreateDirectoryW(FilePath.c_str(), NULL);
return 0;
}
答案 1 :(得分:0)
如果您没有构建Unicode可执行文件,则在std :: string上调用c_str()
将导致const char*
(也称为非Unicode LPCTSTR),您可以将其传递到{{1} }()。
代码如下所示:
CreateDirectory
请注意,如果您尝试构建Unicode可执行文件,则会导致编译错误。
如果您必须附加到CreateDirectory(FilePath.c_str(), NULL):
,我建议您继续使用FilePath
或使用Microsoft的std::string
进行字符串操作,因为这样做不那么痛苦方式和杂耍原始的char *。我个人会使用CString
,除非您已经在使用CString的MFC应用程序中。