为CreateDirectory转换'const char *'为'LPCTSTR'

时间:2013-01-17 01:49:05

标签: c++ c2664

#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'

  1. 如何进行此转换?
  2. 下一步是将今天的日期设置为字符串或字符,并将其与文件路径连接。这会改变我步骤1的方式吗?
  3. 我在数据类型和转换方面很糟糕,对那里的5岁儿童有一个很好的解释吗?

2 个答案:

答案 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应用程序中。