我有两个过程,一个用于顺序创建一组文件,另一个过程是按相同的顺序逐个读取。
第一个过程是依次创建文件,然后移至另一个目录,如下所示。
file = File.open(file_path, "a:UTF-8")
file.write "Write something.."
file.write "Write something.."
file.write "Write something.."
file.close
FileUtils.mv(file_path, new_dir) #move the file to another directory
第二个过程应该完全按照创建文件的顺序读取文件。所以我要按mtime整理文件,读取然后删除文件。
files = Dir.glob(new_dir + "*").sort_by{ |f| File.mtime(f) }
if !files.empty?
files.each do |file|
# reads the file delete it
end
end
这在大多数情况下都是有效的,但是奇怪的是,有时稍后读者创建的后来创建的文件会破坏顺序。
我注意到在这种情况下常见的一件事是第n个文件比第n + 1个文件大得多。但是应该不成问题,因为我要依次创建文件并使用mtime进行排序。
我在这里很难找到根本原因。是因为I / O如何处理带下划线的文件?可能是因为File.mtime不考虑毫秒?但是我在每次创建文件之间增加了1秒的睡眠时间,这减少了出现的次数,但仍然会发生。