如何检查文件是不是正在编辑? (红宝石)

Posted

技术标签:

【中文标题】如何检查文件是不是正在编辑? (红宝石)【英文标题】:How to check if a file is being edited? (Ruby)如何检查文件是否正在编辑? (红宝石) 【发布时间】:2011-06-28 00:25:42 【问题描述】:

我正在编写一些代码来将电子邮件写入文件,让您在自己的编辑器中进行编辑,完成后您可以告诉我的代码继续执行。我想让它捕获您仍然打开文件的常见错误,因此可能没有保存它。

我的第一次尝试是尝试获得文件的排他锁(使用File.flock),但从未成功。更多谷歌搜索表明this is a hard problem。

最好的建议似乎是寻找常见的锁定文件,例如vi foo 将生成.foo.swpjoe foo 将生成.#foo

所以问题是,有没有更好的方法来判断文件是否正在被编辑?如果没有,是否有所有常见锁定文件命名约定的列表?

【问题讨论】:

【参考方案1】:

使用system("#ENV['EDITOR'] #path) 调用他们选择的编辑。当该过程结束时程序将继续运行,即退出编辑器。

如果您不信任他们退出编辑器,您可以派生一个进程来观察文件的修改时间,并在修改时间更改时将程序的其余部分排队(尽管如果他们可能会发生多次增量保存)。

【讨论】:

感谢您的想法,但我明确希望能够在编辑器中撰写电子邮件时浏览程序中的其他电子邮件。【参考方案2】:

lsof以某种方式获取打开文件的列表,可能通过在 /proc/[pid]/ 中搜索,以及您建议的用于查找交换/临时文件的方法。

【讨论】:

lsof 可能不会安装在所有机器上,我不想让lsof 成为依赖项。但它可能适用于阅读本文的其他人。

以上是关于如何检查文件是不是正在编辑? (红宝石)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用相同的表单在 ruby​​ on rails 中创建和编辑

如何在RubyMine中打开宝石进行编辑?

检查数据块记录是不是处于编辑或添加状态

如何禁用编辑和删除rails_admin?

检查文件是不是更新

PE文件中是不是有完整性检查?