none
排他モードで作成したファイルを強制的に削除する方法について RRS feed

  • 質問

  • Visual Stidio 2005 on Windows XPで開発しています。

    あるファイルを複数のユーザが同時に使用する際の利用制限を行うため、
    最初に使用した人が一時ファイルを排他モードで作成し、終了時に削除するということをしようとしています。

    この場合、作成した人が正常に終了しないと排他モードのファイルが残ってしまいます。

    これを強制的に削除するにはどのような処理を施したらいいのでしょうか。

    ご教授お願い致します。
    2009年8月26日 5:26

回答

  • プロセスが終了しているのなら、排他モードは解除されているはずですが。
    質問に対する回答ではありませんが、CreateFile() に対してFILE_FLAG_DELETE_ON_CLOSEを指定してみてはどうでしょうか?
    ファイルハンドルを閉じた時点で自動的にファイル削除されるはずです。fopen()にDを指定してもいいです。
    2009年8月26日 6:10
  • 佐祐理様の返信で解決かもしれませんが、
    下記のサイトでロック解除の操作が解説されています。
    コマンドライン編を応用すればプログラムからも可能でしょうか。(未検証です。)
    もっとスマートな方法があるのかもしれませんが、存じません(v v)
    -----------------------------------------------------------------------------------
    ↓共有ファイルを現在使用しているユーザーを特定する方法
    http://www.atmarkit.co.jp/fwin2k/win2ktips/083opened_net_file/083opened_net_file.html
    (見出しを抜粋)
    共有ファイルの使用状況を確認する方法(GUI編)
    共有ファイルの使用状況を確認する方法(コマンドライン編)
    共有ファイルを強制的に閉じる方法(GUI編)
    共有ファイルを強制的に閉じる方法(コマンドライン編)
    -----------------------------------------------------------------------------------
    以下、雑感ですが、、、
    排他用の空ファイルは、ふだんエクスプローラーで開かないようなフォルダに置いておけば
    ロックをかけないでもOKな気がしました。
    2009年8月27日 2:13

すべての返信

  • プロセスが終了しているのなら、排他モードは解除されているはずですが。
    質問に対する回答ではありませんが、CreateFile() に対してFILE_FLAG_DELETE_ON_CLOSEを指定してみてはどうでしょうか?
    ファイルハンドルを閉じた時点で自動的にファイル削除されるはずです。fopen()にDを指定してもいいです。
    2009年8月26日 6:10
  • 説明が不足していてすいません。

    ネットワーク上のファイルを複数のユーザが使用するため、

    誰かがそのファイルを使用しているので今は参照だけ出来る

    といったような制御をしたいので、ファイル利用状況を判断するための
    空のファイルで排他処理を行おうと思っています。

    使用中、エクスプローラなどでファイルの削除などされると困るため、
    排他モードでファイルを作成使用と思うのですが、
    それをすると、作成したユーザが削除せずにプログラムを終了してしまうと、
    排他モードの状態でそのファイルが残ってしまい、誰も削除出来ない・・・という状況に陥る気がするのですが、
    それは認識間違いでしょうか??

    2009年8月26日 6:21
  • 佐祐理様の返信で解決かもしれませんが、
    下記のサイトでロック解除の操作が解説されています。
    コマンドライン編を応用すればプログラムからも可能でしょうか。(未検証です。)
    もっとスマートな方法があるのかもしれませんが、存じません(v v)
    -----------------------------------------------------------------------------------
    ↓共有ファイルを現在使用しているユーザーを特定する方法
    http://www.atmarkit.co.jp/fwin2k/win2ktips/083opened_net_file/083opened_net_file.html
    (見出しを抜粋)
    共有ファイルの使用状況を確認する方法(GUI編)
    共有ファイルの使用状況を確認する方法(コマンドライン編)
    共有ファイルを強制的に閉じる方法(GUI編)
    共有ファイルを強制的に閉じる方法(コマンドライン編)
    -----------------------------------------------------------------------------------
    以下、雑感ですが、、、
    排他用の空ファイルは、ふだんエクスプローラーで開かないようなフォルダに置いておけば
    ロックをかけないでもOKな気がしました。
    2009年8月27日 2:13
  • 勉強不足で申し訳ありません。
    教えて頂いた内容を色々試してみます。

    ありがとうございました。

    2009年8月28日 3:43
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    佐祐理さん、あんにんごさん、いつもお世話になっております。

    msdn.kikiさん、初めまして。
    MSDNフォーラムのご利用有難うございます。

    佐祐理さんと、あんにんごさんからアドバイスを頂いたと思うのですが、問題解決につながりましたか?
    コマンドラインを応用してロックを解除するバッチ処理を作ることが出来たでしょうか。

    今回、佐祐理さんと、あんにんごさんからの投稿が、有用な情報であった思いましたので、勝手ながら、回答マークを付けさせてもらいました。
    問題が解決していないようでしたら、新たに問題点を投稿して頂ければと思います。

    もし、他にアドバイスが出来る方がいらっしゃいましたら、ご投稿の程、宜しくお願いします(^-^)

    今後ともMSDNフォーラムを宜しくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年9月14日 10:01