- PR -

ファイルの読み込みでエラー(FileStream、FileOpen)

1
投稿者投稿内容
tossi
会議室デビュー日: 2006/09/21
投稿数: 6
投稿日時: 2007-01-31 18:34
環境 : WindowsXP Pro SP2
VB.NET2003 .NETFramework1.1SP1

CSVファイルをEXCELで開いた状態で、FileStreamで読み込もうとするとIOExceptionが発生しました。この状態のときにFileStreamでCSVファイルを読み込むことはできないのでしょうか?

<プログラム>
Dim srFile As System.IO.FileStream
srFile = New System.IO.FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.Read)
→IOException発生

FileOpen関数ではオープン可能なのですが、既存のプログラムにはあまり手をいれたくないのでFileStreamで実現したいと考えています。
<FileOpenのプログラム>
FileOpen(fileNum, FileName, OpenMode.Input, OpenAccess.Read,OpenShare.Shared)
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-01-31 18:45
引用:

tossiさんの書き込み (2007-01-31 18:34) より:
srFile = New System.IO.FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.Read)


srFile = New System.IO.FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) としてもダメでしょうか?
tossi
会議室デビュー日: 2006/09/21
投稿数: 6
投稿日時: 2007-01-31 19:00
うまくいきました。ありがとうございます。
FileShareの方を変えるのですね。FileAccessばかり変えてました。
FileShare.Readだとダメな理由はなんなのでしょう?
EXCELで書き込み禁止にしているので、プログラム側でも読み取り用(FileShare.Read)にすれば良いと思っていたのですが。。。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-01-31 19:08
引用:

tossiさんの書き込み (2007-01-31 19:00) より:

EXCELで書き込み禁止にしているので、プログラム側でも読み取り用(FileShare.Read)にすれば良いと思っていたのですが。。。


推測ですが…
MSDN で FileShare 列挙体のヘルプを見ると、None の説明にはこう書いてあります。

引用:

現在のファイルの共有を解除します。ファイルを閉じるまで、このプロセスまたは別のプロセスがファイルを開く要求をしても失敗します。


None で「別のプロセスがファイルを開く要求をしても失敗する」ということは、Read だ
と「自分だけ Read 」ということになりそうです( Read の項目を参照のこと)。
なので、 ReadWrite を指定してあげる必要があるのではないでしょうか。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
1

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