将'const char*'转换为 CreateDirectory 的'LPCTSTR'
Converting 'const char*' to 'LPCTSTR' for CreateDirectory
#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'
- 如何进行此转换?
- 下一步是将今天的日期设置为字符串或字符并将其与文件路径连接。这会改变我第一步的做法吗?
- 我在数据类型和转换方面很糟糕,有一个很好的解释给5岁的孩子吗?
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的操作系统版本早就死了,现在一切都是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;
}
如果您不构建Unicode可执行文件,在std::string上调用c_str()
将导致const char*
(又称非Unicode LPCTSTR),您可以将其传递给CreateDirectory
()。
代码应该是这样的:
CreateDirectory(FilePath.c_str(), NULL):
请注意,如果你试图构建一个Unicode可执行文件,这将导致编译错误。
如果你必须添加到FilePath
,我建议你要么继续使用std::string
,要么使用微软的CString
来做字符串操作,因为这比用C的方式和处理原始char*要少一些痛苦。我个人会使用std::string
,除非你已经在使用CString的MFC应用程序。