Печать строки LPCWSTR в файл

Я написал программу, в которой я храню список имен файлов в структуре, которую я должен напечатать в файле. Тип имен файлов указан в 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();

2

Решение

Если вы хотите конвертировать, тогда это должно сработать (я не смог заставить работать 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;
}
}
}
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]