Как проверить, редактируется ли файл?(Рубин) - PullRequest
0 голосов
/ 16 февраля 2011

Я пишу некоторый код для записи электронного письма в файл, позволяю вам редактировать его в своем собственном редакторе, и когда вы закончите, вы можете сказать моему коду продолжить.Я хотел бы, чтобы он улавливал распространенную ошибку, когда у вас все еще открыт файл, и, следовательно, возможно, он его не сохранил.

Моя первая попытка состояла в том, чтобы попытаться получить эксклюзивную блокировку файла (используя File.flock ), но она так и не перехватила его.Немного гуглинг говорит о том, что это сложная проблема .

Лучше всего будет искать общие файлы блокировки, например, vi foo даст .foo.swp, а joe fooсделает .#foo.

Итак, вопрос в том, есть ли лучший способ определить, редактируется ли файл?А если нет, то есть ли список всех общепринятых соглашений о присвоении имен файлам блокировки?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2011

lsof получает список открытых файлов каким-то образом , возможно, путем поиска в / proc / [pid] /, а также подходов, которые вы предлагаете найти для проверки файлов подкачки / temp.

0 голосов
/ 16 февраля 2011

Используйте system("#{ENV['EDITOR']} #{path}), чтобы вызвать их редактор по выбору. Программа продолжит работу после завершения этого процесса, то есть выйдет из редактора.

Если вы не доверяете им выйти из редактора, вы можете отключить процесс, чтобы посмотреть время изменения файла, и поставить в очередь остальную часть программы при изменении времени модификации (хотя это может произойти несколько раз, если сохранить постепенно).

...