保持流打开或每次需要使用时打开它更有效?
What's more efficient to keep the fstream open or to open it every time it needs to be used?
本文关键字:有效 更新时间:2023-10-16
我的问题是,最好打开一个流并在程序结束时关闭它,或者每次我想使用它时打开它。 我举个例子。 这是一个简单的 Looger 类:
class Logger
{
Logger()
{
f.open("log.txt", std::ofstream::trunc);
}
~Logger()
{
f.close();
}
public:
static void log(const std::string& message)
{
static Logger l;
l.f<< message<<'n';
}
private:
std::osftream f;
};
那样会更好吗?
class Logger
{
Logger()
{
f.open("log.txt", std::ofstream::trunc);
f.close()
}
~Logger()
{
}
public:
static void log(const std::string& message)
{
static Logger l;
l.f.open("log.txt", std::ofstream::app);
l.f<< message<<'n';
l.f.close();
}
private:
std::osftream f;
};
通常,您希望保持文件打开状态,因为如果文件以某种方式被用户替换,您的程序可能会非常不满意。例如,查看将编辑保存到长时间运行的 .bat 或 bash 脚本时会发生什么情况。此外,打开和关闭文件时也存在速度问题。
另一方面,对于开发过程中的详细日志记录,日志文件状态在每条消息后关闭的好处,尽管任何级别的崩溃甚至可能阻止操作系统保存任何缓冲的内容,即使在刷新((之后,并且一些其他工具可以在新的日志文件中轮换,这可能意味着这些好处是值得的, 但仅用于日志记录。
另一方面,编写自己的日志文件循环并不是特别困难(关闭并使用下一个名称重新打开很少 MB(,并且保持文件打开的速度优势可能会使日志记录更具吸引力。
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 递归函数有效,但无法记忆
- 在C++中初始化向量映射的最有效方法
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 如何有效地在 std::vector 中插入一对?
- C++模板 t 不是有效的模板类型
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 将此布尔值传递给此函数的最有效方法是什么?