2014-01-17 199 views
1

我想知道如果我正在以正確的方式進行操作。打開文件後檢查文件是否被修改關閉

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

現在,我可以使用默認編輯器打開我想要的文件,但是如何在關閉之前記錄文件是否被修改。

我應該創建一個Process並做Process.wait什麼?

感謝您的幫助

回答

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。如Arup Rakshit建議使用File::mtime,如果存儲庫中存在如此龐大的文件。 (缺點:假陽性警報保存未經修改)

+2

如果它的一個巨大的文件,你會消耗太多的內存這個微不足道的任務,檢查修改時間似乎是這樣做的最適當的方法 – bjhaid

+0

+1 /等,如果我知道我不會問這個問題謝謝 – Supersonic

+0

@bjhaid,我提到了內存消耗。感謝您的反饋。 – falsetru

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. 
+0

聽起來很有趣去檢查出 – Supersonic

+0

用戶,打開文件和before_opening時間已設置,用戶尚未完成編輯該文件,我已經獲得相同的時間before_closing – Supersonic