C ++写入字节的文件向量

时间:2014-03-26 13:37:54

标签: c++

我有:

typedef unsigned char;
std::vector<byte> data;

我试图以这种方式将数据保存到文件中(但我有错误):

fstream file(filename,ios::out);
file.write(&data, data.size());

如何处理或投射数据以将其写入文件。

6 个答案:

答案 0 :(得分:6)

要将矢量存储在文件中,您必须编写矢量的内容,而不是矢量本身。您可以使用&vector[0]访问原始数据,第一个元素的地址(假设它包含至少一个元素)。

ofstream outfile(filename, ios::out | ios::binary); 
outfile.write(&data[0], data.size());

这在编写时应该相当有效。 fstream是通用的,如果您要写,请使用ofstream

答案 1 :(得分:4)

*声明file.write(&buffer[0],buffer.size())出错:

  

错误C2664:&#39; std :: basic_ostream&lt; _Elem,_Traits&gt; :: write&#39; :不能   转换参数1来自&#39; unsigned char *&#39; to&#39; const char *&#39;

*在我的编译器(VS2008)中,我没有vector的data()方法。

我认为以下是正确的:

file.write((const char*)&buffer[0],buffer.size());

答案 2 :(得分:3)

使用vector::data获取指向基础数据的指针:

file.write(data.data(), data.size());

答案 3 :(得分:2)

您要传递第一个元素的地址,而不是矢量对象本身的地址。

     &data[0]

注意:在执行此操作之前,请确保向量不为空。

答案 4 :(得分:1)

许多这样的解决方案只是部分完成(缺少包含和强制转换),所以让我发布一个完整的工作示例:

#include <vector>
#include <fstream>

int main()
{
    std::vector<std::byte> dataVector(10, std::byte{ 'Z' });

    const std::string filename = "C:\\test_file.txt";

    std::ofstream outfile(filename, std::ios::out | std::ios::binary);
    outfile.write(reinterpret_cast<const char*>(dataVector.data()), dataVector.size());

    return 0;
}

答案 5 :(得分:0)

我认为ostream.write(myVector [0],...)将无法正常工作,因为它无法读取向量(我有)。 什么有效是ostream.write(MyVector.data(),...) 注意:对于阅读使用ifstream.read(const_cast(MyVector.data()),...)