我编写了一个程序,我将文件名列表存储在一个结构中,我必须将其打印在一个文件中。文件名的类型在LPCWSTR中,如果使用ofstream类,则会遇到只打印文件名地址的问题。我也试过wofstream,但它导致“读取位置的访问冲突”。我搜索网站来缓解这个问题,但无法得到一个正确的解决方案。很多人建议尝试使用wctombs功能但我无法理解将LPCWSTR打印到文件是有帮助的。请帮我解决这个问题。
我的代码是这样的,
ofstream out;
out.open("List.txt",ios::out | ios::app);
for(int i=0;i<disks[data]->filesSize;i++)
{
//printf("\n%ws",disks[data]->lFiles[i].FileName);
//wstring ws = disks[data]->fFiles[i].FileName;
out <<disks[data]->fFiles[i].FileName << "\n";
}
out.close();
答案 0 :(得分:3)
如果你想转换那么这应该有用(我无法让wcstombs工作):
#include <fstream>
#include <string>
#include <windows.h>
int main()
{
std::fstream File("File.txt", std::ios::out);
if (File.is_open())
{
std::wstring str = L"русский консоли";
std::string result = std::string();
result.resize(WideCharToMultiByte(CP_UTF8, 0, str.c_str(), -1, NULL, 0, 0, 0));
char* ptr = &result[0];
WideCharToMultiByte(CP_UTF8, 0, str.c_str(), -1, ptr, result.size(), 0, 0);
File << result;
}
}
使用原始字符串(因为评论抱怨我使用std::wstring
):
#include <fstream>
#include <windows.h>
int main()
{
std::fstream File("File.txt", std::ios::out);
if (File.is_open())
{
LPCWSTR wstr = L"русский консоли";
LPCSTR result = NULL;
int len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, 0, 0);
if (len > 0)
{
result = new char[len + 1];
if (result)
{
int resLen = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, &result[0], len, 0, 0);
if (resLen == len)
{
File.write(result, len);
}
delete[] result;
}
}
}
}