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