打开文件后检查文件是否在关闭时被修改

时间:2014-01-17 13:40:34

标签: ruby windows

我想知道我是否采用了正确的方法。

def checkout
  clone = system( "svn export #{file} tmp/" )
  open_file = system( "start tmp/#{@file}" )
end

现在,我可以使用默认编辑器打开我想要的文件,但是如何在关闭前记录文件是否被修改。

我应该创建Process并执行Process.wait或其他什么吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

使用File::mtime方法。

  

将指定文件的修改时间作为Time对象返回。

file_time_before_opening = File.mtime('your file/path')
# do file operation as you like
file_time_after_closing = File.mtime('your file/path')
# now compare file_time_before_opening and file_time_after_closing to know
# if it is modified or not.

答案 1 :(得分:1)

如果您的意思是在Windows中使用start,请使用/wait/w选项让它等到编辑器终止。

使用IO::read检查文件内容修改。 (在编辑执行之前,之后)。

before = IO.read('tmp/#{@file}', {mode: 'rb'})
system("start /wait tmp/#{@file}")
after = IO.read('tmp/#{@file}', {mode: 'rb'})

# Check the file content modification.
if before != after:
    # File changed!

如果您正在编辑一个大文件,IO::read将相应地使用memroy。如果您的存储库中存在如此庞大的文件,请使用File::mtime作为Arup Rakshit建议。 (缺点:无需修改即可保存误报)