gpt4 book ai didi

如果 open() 在另一个类方法中,则 C++ ofstream 无法写入

转载 作者:行者123 更新时间:2023-11-30 04:29:13 25 4
gpt4 key购买 nike

我有一个使用 ofstream 对象 log 的 FileTransfer 类。该类的构造函数在 ofstream 对象上调用 open(),其中 logFileName 在 .h 文件中具有默认值。

class FileTransfer {
public:
FileTransfer(char *logFileName = "client log.txt");
bool sendFile();
ofstream log; // log file
};

FileTransfer::FileTransfer(char * logFileName) {
this -> logFileName = logFileName;
// Open log file
log.open(logFileName);
}

在另一个类方法 sendFile() 中,我使用流来记录事件。

bool FileTransfer::sendFile() {
log << "Sender: starting on host " << localhost << endl;
}

当我这样处理时,没有任何内容写入日志文件。我试过检查 log.is_open() 和 good() 并且都返回 true。

编辑:

int main() {
FileTransfer * ft = new FileTransfer(); // open() is called
ft -> sendFile();
}

如果我在我的输出操作之前在 FileTransfer::sendFile() 方法中调用 log.open(),那么输出将完全正常。

bool FileTransfer::sendFile() {
log.open(logFileName);
log << "Sender: starting on host " << localhost << endl;
}

为什么会这样?

最佳答案

啊哈,我知道你有什么问题!您正在写入文件,但实际上它进入了缓冲区并且在第一种情况下没有刷新(这有点随机)。

在打印后添加以下行:

log.flush();

它应该可以解决您的问题。

关于如果 open() 在另一个类方法中,则 C++ ofstream 无法写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9549339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com