0

我对编程很陌生,我正在尝试编写一个程序,用户输入一个日期,然后将该日期添加到文件目录名称中,然后搜索该文件目录。

下面是我正在使用的内容。我有很多功能可以做到这一点。我在网上搜索并尝试用几种不同的方式进行转换,但我只是不理解它......所以我离开了(我知道的是不正确的)a静态转换。

也许我只是没有做正确的转换......基本上这会将它扔回使用 WINAPI 处理程序的函数。我能否让它发挥作用是一个完全不同的故事......在此先感谢您的帮助!

wstring fDate;
wstring fileDin;

const TCHAR* s = _T (fileDin);

std::wstring(fDate);
std::wstring(fileDin) =L"Z:\\software\\A\\AC\\" + fDate;
wcout<< fileDin;
cout <<endl;

//wstring fileDin(&arc[1]);
fileDin = static_cast<TCHAR>(arc[1]);
dir(2, arc);
4

1 回答 1

1

TCHAR可以是wchar_t(当您使用 Unicode 时)或char(当您使用多字节时)。
另一方面,std::wstring总是包含 type 的字符wchar_t,所以最好wchar_t*直接使用而不是TCHAR*(如果可能的话)。

然后可以通过使用以下构造函数来完成wchar_t*转换:std::wstringstd::wstring

wchar_t* wcstr = L"my string";
std::wstring wstr(wcstr);

std::wstring通过wchar_t*简单的调用c_str()方法:

wchar_t* wcstr = wstr.c_str();

然后有时您可能需要在“宽”字符串(std::wstrings 保存wchar_t字符)和多字节字符串(std::strings 保存chars)之间进行转换。我通常使用以下助手:

// multi byte to wide char:
std::wstring s2ws(const std::string& str)
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo(size_needed, 0);
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}

// wide char to multi byte:
std::string ws2s(const std::wstring& wstr)
{
    int size_needed = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), int(wstr.length() + 1), 0, 0, 0, 0); 
    std::string strTo(size_needed, 0);
    WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), int(wstr.length() + 1), &strTo[0], size_needed, 0, 0); 
    return strTo;
}
于 2013-02-06T22:11:37.060 回答