Печать строки 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();

1 ответ

Решение

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