- PR -

ファイルの読み込み

1
投稿者投稿内容
なゆき
会議室デビュー日: 2004/02/04
投稿数: 17
投稿日時: 2005-09-12 00:41
いつもこちらでお世話になっています。今回もよろしくお願いします。

現在悩んでいる箇所なんですが、ファイルの制御で悩んでいます。

状況としては、filestreamでファイルをオープンしておいて、とりあえずそのインスタンスは置いておきます。その後、別のインスタンスで同じファイルを開こうと思っています。前者をファイル1、後者をファイル2とします。

前者は、ファイルの書き込みをできる状態で。
後者は、ファイルの読み込みだけできる状態で。

ファイルオープンのモードや排他制御できるようにしているつもりなんですが、うまく2つ目をオープンできません。現在はこんな感じになっています。

Private f1, f2 As System.IO.FileStream

fs1 = New FileStream("c:\test.txt", FileMode.Open, FileAccess.Read,FileShare.Read)
fs2 = New FileStream("c:\test.txt", FileMode.Open,FileAccess.Read)

FileShareもRead権限を与えているので読むだけならできると思うのですが、エラーで終了してしまいます。
「エラー内容はプロセスはファイル "c:\test.txt" にアクセスできません。このファイルは別のプロセスが使用中です。」

何かほかにも権限を与えないと駄目なのでしょうか。
よろしくお願いします。
ファイルのオープンの仕方はFileStreamを使用したいと思っています。前者はFileStreamで必ず開きたく思っています。後者は別の方法でも良いかと思っていますが、できれば合わせたく思っています。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2005-09-12 02:45
南部です。

引用:

なゆきさんの書き込み (2005-09-12 00:41) より:
(略)

前者は、ファイルの書き込みをできる状態で。
後者は、ファイルの読み込みだけできる状態で。

(略)

fs1 = New FileStream("c:test.txt", FileMode.Open, FileAccess.Read,FileShare.Read)
fs2 = New FileStream("c:test.txt", FileMode.Open,FileAccess.Read)


落ちつきましょう。

まず、説明とサンプルが噛み合っていませんが、
fs1 = New FileStream("c:test.txt", FileMode.Open, FileAccess.Write, FileShare.Read)
とします。

この場合、f2がファイルを開くための必要条件は、
1.アクセス指定が、FileAccess.Read(fs1のFileShareがReadだから)
2.共有方法が、FileShare.Write(fs1のFileAccessがWriteだから)
になります。

FileShareの定数は
「同一のファイルに対してほかの FileStream が
 保有できるアクセスの種類を制御する定数」
です。
※FileStreamコンストラクタでの既定値はFileShare.Readです。
なゆき
会議室デビュー日: 2004/02/04
投稿数: 17
投稿日時: 2005-09-12 08:03
南部さん、ありがとうございます。

確かに、少し落ち着いた方が良かったです。

いろいろ試す内にとんでもないプログラムを書いていました。

的確なアドバイスありがとうございます。
1

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