- PR -

ファイルが既に開かれているときと読み取り専用になっているときの処理を区別したいのですが…。

1
投稿者投稿内容
くぇれる
会議室デビュー日: 2005/03/30
投稿数: 7
投稿日時: 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 です。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-04-30 20:54
 ファイルが開かれていても、読みとり専用であるという属性に変わりは無いですよね。ということは、検査する順番が問題である、ということです。


 検査する順番が問題になるケースは色々あります。その辺が疑い所のひとつなので、覚えておきましょう。
_________________
がりうむ
会議室デビュー日: 2004/11/16
投稿数: 19
投稿日時: 2005-05-05 04:27
ちょっとくどく説明してみます。

ファイルが「開かれているかどうか」と「読み取り専用であるかどうか」というのは独立した概念です。つまり、
A. 開かれていて読み取り専用である
B. 開かれていて読み取り専用でない
C. 開かれていなくて読み取り専用である
D. 開かれていなくて読み取り専用でない
の4通りすべてが有り得るので、それぞれについてどういう動作をしたいか考える必要があります。それを整理したうえで、どの順番に条件をチェックすれば良いか考えてみましょう。ひょっとしたら、2つの条件を同時にチェックした方が良いのかもしれません。

サンプルコードでは、AとCのケースについて IntRet=1 に設定されることしか読み取れません(ついでに、コメント文とIf文の条件が一致してません)。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2005-05-05 07:04
NTFS Access Controlで読取専用しか権限がないというのも
ありえますがいいのかな?
1

スキルアップ/キャリアアップ(JOB@IT)