- - PR -
ファイルが既に開かれているときと読み取り専用になっているときの処理を区別したいのですが…。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-04-30 18:53
いつもこの会議室を参照し、参考にさせていただいております。
早速ですが、ファイルが既に開かれているときとファイルの属性が読み取り専用になっているときの処理を区別したいと考えておりますが、どのようにしたら良いのかがわかりません。 こちらでどのようにコーディングをしたか(したいか)を記述しておきます。 -------------------------------------------------------------------------------- Public mObjExcel As Excel.Application 'エクセル用 (中略) Dim IntRet As Integer = 0 '戻り値設定用変数 (中略) If mObjExcel.Workbooks.Item(1).ReadOnly = True Then 'ファイルが既に開かれている場合。 IntRet = 1 ElseIf …………… Then 'ファイルの属性が読み取り専用になっている場合。 IntRet = 2 Else End If -------------------------------------------------------------------------------- 上記のようにすると、ファイルが既に開かれているときも、ファイルの属性が読み取り専用になっているときも処理が同じになってしまいます。 どのようにしたら良いのか、どなたか教えていただけないでしょうか? そもそも既に開かれているときと読み取り専用になっているときの区別ができるのでしょうか? 環境はWindow2000、VB.NET です。 |
|
投稿日時: 2005-04-30 20:54
ファイルが開かれていても、読みとり専用であるという属性に変わりは無いですよね。ということは、検査する順番が問題である、ということです。
検査する順番が問題になるケースは色々あります。その辺が疑い所のひとつなので、覚えておきましょう。 _________________ |
|
投稿日時: 2005-05-05 04:27
ちょっとくどく説明してみます。
ファイルが「開かれているかどうか」と「読み取り専用であるかどうか」というのは独立した概念です。つまり、 A. 開かれていて読み取り専用である B. 開かれていて読み取り専用でない C. 開かれていなくて読み取り専用である D. 開かれていなくて読み取り専用でない の4通りすべてが有り得るので、それぞれについてどういう動作をしたいか考える必要があります。それを整理したうえで、どの順番に条件をチェックすれば良いか考えてみましょう。ひょっとしたら、2つの条件を同時にチェックした方が良いのかもしれません。 サンプルコードでは、AとCのケースについて IntRet=1 に設定されることしか読み取れません(ついでに、コメント文とIf文の条件が一致してません)。 |
|
投稿日時: 2005-05-05 07:04
NTFS Access Controlで読取専用しか権限がないというのも
ありえますがいいのかな? |
1