5
#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 岁的孩子有很好的解释吗?
4

2 回答 2

5

std::string是一个保存char基于数据的类。要将std::string数据传递给 API 函数,您必须使用其c_str()方法获取char*指向字符串实际数据的指针。

CreateDirectory()将 aTCHAR*作为输入。如果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;
}
于 2013-01-17T02:05:01.423 回答
0

如果您没有构建 Unicode 可执行文件,c_str()则调用 std::string 将生成一个const char*(也称为非 Unicode LPCTSTR),您可以将其传递给CreateDirectory()。

代码如下所示:

CreateDirectory(FilePath.c_str(), NULL):

请注意,如果您尝试构建 Unicode 可执行文件,这将导致编译错误。

如果您必须追加,FilePath我建议您继续使用std::string或使用 MicrosoftCString来进行字符串操作,因为这比使用 C 方式和处理 raw char* 更痛苦。我个人会使用std::string,除非您已经在使用 CString 的 MFC 应用程序中。

于 2013-01-17T01:56:14.210 回答