2016-09-13 9 views
1

Как я могу проверить, что этот файл не открывается другим процессом?Как проверить, что файл не открывается другим процессом?

Теперь я использую OS.File.move (...) для перемещения файла вперед и назад:

var promise = OS.File.move(filePath, newFilePath); 

promise.then(
    function onFulfilled(){ 
     OS.File.move(newFilePath, filePath); 

     // Success 
    }, 
    function onRejected(){ 
     // Fail. Ask user to close another application 
    } 
); 

Но это решение странно. Есть ли другой способ выполнить эту проверку?

ответ

0

Просто откройте его самостоятельно. Если его можно открыть, вы можете делать то, что хотите с ним делать. Если нет, попросите оператора закрыть и после его подтверждения, что он закрыт, повторите попытку

+0

Это будет работать только для Windows. В Linux/Unix этого не произойдет. См. Мое решение ниже. – Noitidart

1

Это отличный вопрос. И у вас там отличное решение! Вероятно, вы захотите придерживаться этого метода. Я никогда этого не делал, мне нужно проверить его на mac/* nix, чтобы убедиться, но похоже, что он должен работать, как будто файл используется, он не должен быть подвижным. Я боролся с этим пару лет назад.

Кроме того, вместо этого вы можете переименовать. Переименование - это то же самое, что и OS.File.move, но в том же каталоге.

Не-трик способ требует JS-ctypes:

В Windows вы можете сделать это OS.File.open и если это не удается, то он открыт. Если вам удастся сделать так, чтобы .close(), поскольку он не использовался другим. Это не будет работать на mac/* nix, поскольку open может открыть что угодно.

На макинтош/* Никс вы должны использовать open затем fcntl затем close с помощью JS-ctypes, как я сделал здесь: https://github.com/Noitidart/Profilist/blob/219f225643828a000c60d01ea212505bb0817ff5/modules/workers/MainWorker.js#L1313

Вы можете увидеть в этой же функции, в приведенном выше блоке, если это Windows, я OS.File.open. Мой код здесь немного сложнее, потому что я также получаю pid процесса, в котором он открыт.

Я определил все это в ostypes lib - https://github.com/Noitidart/ostypes - вы можете импортировать это и использовать его сразу же.

 Смежные вопросы

  • Нет связанных вопросов^_^