如何在不关闭文件的情况下保存文件?

时间:2013-08-19 13:52:51

标签: progress-4gl openedge

OUTPUT TO "logfile.txt".

FOR EACH ...:
  ...
  PUT "Some log data". OUTPUT CLOSE. OUTPUT TO "logfile.txt" APPEND.
  ...
END.

在某些时候没有找到合适的语句来保存文件。我不想使用UNBUFFERED APPEND,因为它应该更慢。也许有内置的日志工具?也许STREAMS可以帮助我?我的解决方案中的问题是每次用OUTPUT TO语句打开它时都必须指定日志文件名。嵌套过程可能没有关于文件名的线索。

2 个答案:

答案 0 :(得分:1)

目前的问题仍然模棱两可。

如果您想通过类似于LOG-MANAGER的标准“服务”来路由输出,您可以使用

  1. 类的静态成员
  2. 在持久性过程中使用API​​并向其发布,
  3. 在会话超级程序中使用API​​并调用它的API
  4. STREAMS将为您提供一种方法,将单个过程或类的输出隔离到单个文件,并保持该输出与生产输出混合,但它仅限于当前程序,这意味着它不是一般解决方案作为应用程序范围的日志工具。

答案 1 :(得分:0)

没有“保存”选项。

但是......你可以用以下方式强制输出:

put control null(0).

“据说慢一点”非常模糊。是的,可能有更多具有无缓冲输出的IO。但这是否真的重要在很大程度上取决于你在做什么以及如何使用它。 非常不太可能真正重要。

STREAM肯定有助于保持组织有序并使其不必在嵌套过程中知道文件的名称。

是的,有内置的日志记录工具。查看LOG-MANAGER系统句柄。

问题中的代码最好写成:

define stream logStream.

output stream logStream to value( "log.txt" ) append unbuffered.

for each customer no-lock:
  put stream logStream custName skip.
  /* put stream logStream control null(0). */  /* if you want to try fooling with buffered output... */
end.

output stream logStream close.