DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ファイルアクセス制御について

環境/言語:[VB.net]
分類:[.NET]

いつもお世話になっております。
ファイルアクセス制御について質問があります。

まず、やりたいことですが、
自作アプリで、
ファイルを開く際に、読み取り可能でファイルをロックし、
他端末でファイルを開いた際に、
Excelのように、
「読み取り専用で開きますか?」といったメッセージを出したいと思っております。

そこで、ファイルロック処理は、
http://dobon.net/vb/dotnet/file/fileshare.html
を参考にさせていただき、
Dim fs As New System.IO.FileStream(fileName, _
System.IO.FileMode.Open, _
System.IO.FileAccess.ReadWrite, _
System.IO.FileShare.Read)

のようにロックしています。

ご質問させていただく内容は、
ロックされたファイルを開く際に、
どの操作が許可されているか知りたいのですが、
方法が見つかりません。
(上記例では、読み取りが許可されているので、
ファイルを開く際に読み取りが許可されていることを取得したい)
ご存知の方がいましたら、ご教授願います。
> ご質問させていただく内容は、
> ロックされたファイルを開く際に、
> どの操作が許可されているか知りたいのですが、
> 方法が見つかりません。
そのアプローチで実現するには手間がかかる上、穴もあります。

書き込みアクセスができない理由としては、ファイルシステムのACLであるとか、ファイル共有のACLであるとか、他のプロセスで開いているとか、色々と考えられます。
それら全てをカバーする手法は大変です。
これに対して、そのチェックしたタイミングと、実際にファイルを開くタイミングには隙間がありますので、チェックした結果でユーザに操作の選択を求めても、実際にファイルを開くタイミングでは状態が変わってしまっていて、意味がなくなるという問題もあります。


故に、「ファイルを開いてみて例外が出るかどうかでチェックする」が妥当だと思います。


xlsファイルの更新日時を見ていると分かりますが、Excelは「読み取り専用を推奨する」設定だと、読み書きアクセスが可能なときは「読み取り専用で開きますか?(はい・いいえ・キャンセル)」と表示されますが、この時点でファイルを開いています。
※Excelの画面はこれのことです: http://www.confrage.com/excel/function/read_only_msg/read_only_msg.html

同じように、実際にファイルを開いてみてからユーザに問いかけることを検討してみませんか?
■No24106に返信(Azuleanさんの記事)
>>ご質問させていただく内容は、
>>ロックされたファイルを開く際に、
>>どの操作が許可されているか知りたいのですが、
>>方法が見つかりません。
> そのアプローチで実現するには手間がかかる上、穴もあります。
>
> 書き込みアクセスができない理由としては、ファイルシステムのACLであるとか、ファイル共有のACLであるとか、他のプロセスで開いているとか、色々と考えられます。
> それら全てをカバーする手法は大変です。
> これに対して、そのチェックしたタイミングと、実際にファイルを開くタイミングには隙間がありますので、チェックした結果でユーザに操作の選択を求めても、実際にファイルを開くタイミングでは状態が変わってしまっていて、意味がなくなるという問題もあります。
>
>
> 故に、「ファイルを開いてみて例外が出るかどうかでチェックする」が妥当だと思います。
>
>
> xlsファイルの更新日時を見ていると分かりますが、Excelは「読み取り専用を推奨する」設定だと、読み書きアクセスが可能なときは「読み取り専用で開きますか?(はい・いいえ・キャンセル)」と表示されますが、この時点でファイルを開いています。
> ※Excelの画面はこれのことです: http://www.confrage.com/excel/function/read_only_msg/read_only_msg.html
>
> 同じように、実際にファイルを開いてみてからユーザに問いかけることを検討してみませんか?

ご回答ありがとうございます。
ファイル属性的なものがありそうな気がしてましたが、
ないようですね><

エラー処理や処理の順序などを工夫して対処したいと思います。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板