fstream写入文件

时间:2012-06-22 20:03:26

标签: c++ fstream

我需要一些帮助,使用 fstream 写一个文件。我目前可以使用fwrite方法编写。但是我想使用fwrite转换数据类型并使用它来编写

以下是我到目前为止所做的事情:

noOfRows = 700;
noOfCols = 100
array[0] = unsigned char [noOfRows * noOfCols]

fstream fstreamFile;
fstreamFile.open ("fstreamFile.txt", fstream::out);

for(int i = 0; i < noOfRows; i++ )
{
fwrite(array[0]+(i*noOfRows), sizeOf(unsigned char), noOfCols, fwriteFile); // writes ok
fstreamFile.write((char*) array[0]+(i*noOfCols), sizeof(unsigned char)); // doesn't write
}

有人可以告诉我我做错了什么吗?我没有编译错误,文件没有被写入(我已经从之前创建了它)。

3 个答案:

答案 0 :(得分:2)

2件事,你在寻找文件的正确位置吗?它应该在工作目录的任何地方。您不需要事先创建文件,它将被创建。其次,确保它正在创建文件,您可以通过以下方式执行此操作:

if (!fstreamFile) { cout << "errorr.." << endl; }

答案 1 :(得分:1)

你倾向于使用iostream来避免施放。

给定一个无符号字符数组,您只需使用算法和迭代器来编写文件。

#include <fstream>
#include <algorithm>
#include <iterator>

// your main and array declaration here

ofstream fstreamFile("fstreamFile.txt");
copy(
    array,
    array + sizeof(array),
    ostream_iterator<unsigned char>(fstreamFile)
);

答案 2 :(得分:1)

(char*) array[0]+(i*noOfCols)

这是将数组的值取在位置0,然后将该值转换为char *(给出一些随机乱码指针),然后将i * noOfCols添加到该值。我相信这可能是你想要的:

(char*) (&array[0]+(i*noOfCols))

但是,在风格上,我建议改为使用C ++强制转换。

reinterpret_cast<char *>(& array[0] + i * noOfCols)

我还建议使用sizeof(unsigned char)代替sizeof(array[0]),而不是更通用。

此外,您似乎正在尝试使用一维数组模拟二维数组。将数组声明为unsigned char array [noOfRows][noOfCols];然后通常对两个维度进行操作会更直截了当。你的方法没有让你获得任何表现。