0

「ファイルが別のプログラムで開かれている」ために削除が許可されないように、MS Office アプリケーションが Ruby プログラムから行うようにファイルをロックしたいと考えています。

Ruby標準ライブラリではそれができないようです-私は試したばかりです-そのため、 LockFileEx関数flock()を呼び出そうとしています。

fd = File.open("locked.file", File::RDWR|File::CREAT, 0644)
fd.write "this file to be locked"
import_array = %w(p i i i i i)
wapi = Win32API.new('kernel32', 'LockFileEx', import_array, "i")
wapi.call(fd, 1, 0, 0, 0, 0)

wapi.call が TypeError 例外「ファイルを文字列に変換できません」で失敗します。

ファイル ハンドルを表すには、import_array の最初の項目として何を使用すればよいですか?

ファイル記述子を String にパックするにはどうすればよいですか? ファイル記述子の構造はどこで取得できますか?

Ruby 1.9.3 を使用しています。

4

2 に答える 2

2

Ruby ファイルのロック メカニズムは協調的であり、すべての関係者が Ruby ロック ファイルの規則を知っていることに依存しています。Microsoft Office は連携しません。

代わりに、ファイル システムにロックを適用することをお勧めします。標準の Ruby ファイル処理メカニズムを使用して、排他ロックでファイルを開くだけです。

于 2013-09-19T08:05:49.680 に答える