在C ++中通过fstream写入文件的功能

时间:2016-11-21 09:59:26

标签: c++ fstream

我创建了一个具有指定名称的文件:

#include <fstream>

SYSTEMTIME systime;
GetSystemTime (&systime);

CString filename;
filename =     specifyNameOfFile(timestamp, suffix); // call a method

std::ofstream fstream(filename,     std::ios_base::app | std::ips_base::out);

我想创建一个像

这样的方法
void WriteToFile(unsigned int count, WORD hour, WORD minute, unsigned char result);

void WriteToFile(unsigned int count, WORD hour, WORD minute, unsigned char result) 
{
    fstream << count << " " << hour << " " << minute << " " << result << "\n";
}

将输入要写入文件的内容,并使用先前定义的fstream。

我尝试将fstream添加到函数的输入但是不起作用:

void WriteToFile(std::ofstream fstream, unsigned int count, WORD hour, WORD minute, unsigned char result);

error C2248给出了VC\include\fstream(803) : cannot access private member declared in class 'std::basic_ios<_Elem, _Traits>'

有人可以建议一个解决方案,以显示我不明白该怎么做吗?

2 个答案:

答案 0 :(得分:1)

你说这个函数被声明为

void WriteToFile(std::ofstream& fstream, unsigned int count, WORD hour, WORD minute, unsigned char result);
//                            ^
//                            Note ampersand here

这有一个问题,因为您尝试按值传递流,这意味着它会被复制。并且您无法复制流对象。

通过引用传递

std::ostream

在不相关的说明中,为了使其与其他流更兼容,我建议您改用基类void WriteToFile(std::ostream& ostream, unsigned int count, WORD hour, WORD minute, unsigned char result);

std::cout

现在你可以传递任何类型的输出流(文件,字符串,stepX),它会起作用。

答案 1 :(得分:0)

我无法添加评论(声誉......),公平地说,我不太了解您的需求,您的问题是什么,所以只需对代码进行一些评论你已经分享了(希望这有点帮助):

1)

CString filename;
filename = ...
Would be much prettier like this:
CString filename = ...

(编译器无论如何都要照顾这个,但仍然)

2)这里有一个拼写错误: specifyNaneOfFile 我想这应该是 specifyNameOfFile

3)在你的功能签名中:

void WriteToFile(unsigned int count, WORD hour, WORD minute, unsigned char result);

&#39;导致&#39;不参考。如果写成功(我为什么不bool WriteToFile?),我想你希望这给调用者一些信息。这样,无论你设置什么结果&#39;在你的功能中,它只会影响你的功能,调用者会得到它给出的功能。 即: 让我们假设这是你的功能:

void MyClass::WriteToFile(unsigned char result)
{
result = 1;
}

来电者称之为:

unsigned char writeResult = 0;
WriteToFile(writeResult)

if (writeResult == 1) ...

writeResult将保持为0。

如果您想要更改,请传递参考,如下所示:

void WriteToFile(unsigned int count, WORD hour, WORD minute, unsigned char &result);

另外,使用&#39; const&#39;对于您不打算改变的每个参数。