创建一个可在使用时重命名的文件

时间:2013-11-13 08:26:06

标签: c++

我有一个有两个子模块的应用程序。另外,他们是自定义Log类写入日志模块活动。我正在处理的是每个模块应该创建具有相同名称的日志文件并将日志写入其中。为了解释它更好地考虑初始运行,其中module1正在app.log中记录日志当另一个应用程序会话以module2启动时,它还应该创建app.log并开始编写。但在此之前,旧的app.log应该重命名为app.log.1。

问题我正在面对日志文件打开时,一个模块函数无法重命名。我在窗口7上使用C ++。要创建我正在使用的文件 - std :: ofstream s_ofs.open(“app.log”,std :: ios :: out | std :: ios :: app);

2 个答案:

答案 0 :(得分:2)

Windows不允许这样做。当您打开文件时,为了编写进行阅读,它已被锁定,您无法在文件打开时执行重命名或删除等操作。

您可能想重新考虑您的设计。要么每个子模块都有自己的唯一命名日志文件。或者使用可以从多个源接收日志记录输入的日志记录模块,并将这些日志文件多路复用到一个文件中。

答案 1 :(得分:1)

您可以通过同步对Log类对象的访问来实现此目的。方法可以如下:

  1. 应用程序在启动时创建Log类对象创建一个 同步对象(比如Mutex)保护对它的访问 记录
  2. 让Log方法接受一个区分的标志 在两个不同模块的访问之间
  3. Module1获取访问权限并开始记录
  4. 当module2想要写入时,Logger将检测到它有来自另一个模块的Log请求,并将关闭该文件,然后重命名该文件并创建另一个具有相同名称的日志文件