将LPCWSTR字符串打印到文件

时间:2014-03-01 07:31:58

标签: c++ ostream 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 个答案:

答案 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;
            }
        }
    }
}