2016-09-13 18 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()に必ず確認してください。 openが何かを開くことができるので、これはmac/* nixでは動作しません。私はここで行ったように、Mac上で

/* nixのあなたはJS-ctypesのを経由して、その後、その後closefcntlopenを使用する必要があります。https://github.com/Noitidart/Profilist/blob/219f225643828a000c60d01ea212505bb0817ff5/modules/workers/MainWorker.js#L1313

私はそれを行うには、Windowsだ場合は、上記のブロックでは、これと同じ機能で見ることができますOS.File.open。ここで私のコードは少し複雑です。なぜなら、それが開かれているプロセスのpidも得られるからです。

これをすべてostypes lib-https://github.com/Noitidart/ostypesに定義しました。これをインポートしてすぐに使用できます。

関連する問題