使用wfstream编写二进制文件

时间:2016-07-18 15:28:24

标签: c++ binaryfiles

我想使用wfstram类在二进制文件中编写结构数据。

为什么输出文件为空?

以下是我的代码。

#include "stdafx.h"
#include <string>
#include <fstream>

using namespace std;

struct bin_data
{
    wstring ch;
    size_t id;
};

int main()
{

    wfstream   f(L"test_bin_file.txt", ios::out | ios::binary);
    bin_data *d = new bin_data;
    d->id = 100;
    d->ch = L"data100";
    f.write((wchar_t*)&d, sizeof(struct bin_data));
    f.close();

    return 0;
}

1 个答案:

答案 0 :(得分:2)

在处理二进制数据时,我不喜欢使用大流 - 二进制最终是字节,所以你不必担心char vs wchar。下面的代码在x64上写入30个字节,8个用于id,8个用于长度,14个(7 * 2)用于字符串本身

int main() {
ofstream  f(L"QQQ.txt", ios::out | ios::binary);

bin_data *d = new bin_data;
d->id = 100;
d->ch = L"data100";

// ID first
f.write((char*)&d->id, sizeof(d->id));
// then string length
auto l = d->ch.length();
f.write((char*)&l, sizeof(l));
// string data
f.write((char*)d->ch.data(), l*sizeof(wchar_t));

f.close();

return 0;
}