【问题标题】:LIne-by-line file-io not working as expected in Windows逐行文件 io 在 Windows 中无法按预期工作
【发布时间】:2013-10-30 20:29:09
【问题描述】:

我在 Windows 环境中使用来自 Strawberry 的 Perl 5.16.1。我有一个读取非常大的文本文件的 Perl 脚本。最小的文本文件是 30M。在读取最后一行末尾没有换行符的文件时,我会得到非常奇特的结果。它可能不会一直发生,但是当它发生时,就好像它正在从 I/O 系统中读取我之前使用 Perl 脚本打开的另一个文件的缓存数据。如果我手动编辑文件并添加换行符,那很好。我添加了一个行计数器和一些内联代码来显示当我接近文件末尾时会发生什么,以确保我不会发疯。为了尝试修复,我尝试将其添加到我的脚本中:

open (SS_LOG, ">>", $SSFile) or die "Can't open $SSFile\r\n $!\r\n";
print SS_LOG "\r\n";
close SS_LOG;

但它什么也没做。该文件保持相同的大小。我还将数据存储在大型数组中。

有没有其他人见过这样的事情?

【问题讨论】:

  • 也许$SSFile 不是你想的那样?用printf "The size of %s is %d\n", $SSFile, -s $SSFile; 语句包装你的修复。 (我预测文件将增长 3 个字节。)

标签: perl line-by-line


【解决方案1】:

尝试取消缓冲您的输出:

SS_LOG->autoflush(1);

【讨论】:

  • 在关闭时不应该刷新吗?
猜你喜欢
  • 1970-01-01
  • 2020-05-02
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2022-07-08
  • 2021-11-24
相关资源
最近更新 更多