c ++ программа для поиска файла, открытого в настоящее время в gvim?

0

Я хочу переименовать папку, например "mv -f old_proj_name new_proj_name".

Но поскольку файл открывается в редакторе gvim, он не разрешает выполнять операцию переименования в папке.

Файл не перемещается в новое имя папки.

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

fopen() не показывает, что файл заблокирован, когда файл открывается редактором gvim.

Я также попытался использовать opendir() API, но не помог.

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

Пожалуйста, направляйте меня.

С уважением, Amol

  • 1
    Просто угадай, а ты используешь cygwin? Просто спрашиваю, потому что из-за фундаментальных различий в том, как файлы управляются между Windows и операционными системами Unix, это не будет работать под Windows.
Теги:

1 ответ

1

перед выполнением операции переименования я должен знать, могу ли я сделать это успешно или нет.

Это ошибка. Вы можете только знать, сможете ли вы успешно выполнить операцию во время проверки. Чтобы узнать, можете ли вы это сделать сейчас, вам нужно проверить его сейчас. Но когда вы на самом деле обойдете его, это "сейчас" превратится в "тогда". Чтобы иметь надежную индикацию, вам нужно снова проверить.

Разве вы не думаете, что это будет очень утомительно?

Таким образом, есть два способа справиться с этим.

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

Во-вторых, вы можете вообще пропустить проверку и просто попытаться выполнить операцию. Если это не удастся, вы не сможете этого сделать. Там вы убили двух зайцев одним выстрелом: вы проверили, возможна ли операция, и выполнили ее в том случае, если это действительно возможно.

Обновить

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

Надеюсь, поможет.

  • 0
    Я использую оболочку cygwin и hamilton для выполнения, например, "mv old_proj_name new_proj_name". Если я выполняю операцию "mv", то отката нет. То есть я не могу откатиться до old_proj_name, если команда не выполнена. Вот почему я хочу знать, есть ли в файле .swp файл или нет. Любой API, который определит файл, заблокирован или нет. С уважением, Амол.
  • 0
    Если команда не выполняется, имя файла остается old_proj_name . Нет необходимости откатываться назад.
Показать ещё 14 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню