none
ファイルアクセスのエラー RRS feed

  • 質問

  • 下記のように記述すると、2行目で「ファイルにアクセス出来ません」と言うエラーになります。
    1行目で FileShare.ReadWrite を指定しているのになぜアクセス出来ないのでしょうか。

     

    FileStream WriteFile = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);

    FileStream ReadFile = new FileStream(FileName, FileMode.Open, FileAccess.Read);

    2007年12月4日 9:02

回答

  • こんにちは、ファクトです。

    FileStreamのFileShare引数指定無し版コンストラクタは、ヘルプを読むところによると

     

    FileShare パラメータを指定しないタイプの FileStream コンストラクタに対しては、FileShare.Read が既定値です。

     

    という事なので、ReadFileを開く際のFileStreamコンストラクタが、「誰かがReadするのは許すけど、誰かがWriteするのは許さない」という指定になり、例外が発生したのではないかと思います。

    なので、ReadFileを開く際のコンストラクタに、FileShare.ReadWriteかFileShare.Writeを指定すれば、とりあえず例外は出なくなります。

    2007年12月4日 9:21
  • 直接のエラー原因はファクトさんが既に述べられている通りです。

    実際に実験したところ、ReadFile側のコンストラクタにFileShare.ReadWriteを加えることで例外が起きなくなります。

     

    気がかりな点として、同時に別々のインスタンス変数でファイルを開くとなんだか混乱するのではないかと思います。

    ReadFileで現在位置が進んだ後に、WriteFile側でSetLengthでサイズ変更したりとか…。

     

    ファイルを作成し、ファイルに書き込み、閉じない内にファイルを読みたいのであれば、FileAccess.ReadWriteは検討してみてはいかがでしょうか?

    2007年12月5日 16:08
    モデレータ

すべての返信

  • こんにちは、ファクトです。

    FileStreamのFileShare引数指定無し版コンストラクタは、ヘルプを読むところによると

     

    FileShare パラメータを指定しないタイプの FileStream コンストラクタに対しては、FileShare.Read が既定値です。

     

    という事なので、ReadFileを開く際のFileStreamコンストラクタが、「誰かがReadするのは許すけど、誰かがWriteするのは許さない」という指定になり、例外が発生したのではないかと思います。

    なので、ReadFileを開く際のコンストラクタに、FileShare.ReadWriteかFileShare.Writeを指定すれば、とりあえず例外は出なくなります。

    2007年12月4日 9:21
  • 直接のエラー原因はファクトさんが既に述べられている通りです。

    実際に実験したところ、ReadFile側のコンストラクタにFileShare.ReadWriteを加えることで例外が起きなくなります。

     

    気がかりな点として、同時に別々のインスタンス変数でファイルを開くとなんだか混乱するのではないかと思います。

    ReadFileで現在位置が進んだ後に、WriteFile側でSetLengthでサイズ変更したりとか…。

     

    ファイルを作成し、ファイルに書き込み、閉じない内にファイルを読みたいのであれば、FileAccess.ReadWriteは検討してみてはいかがでしょうか?

    2007年12月5日 16:08
    モデレータ
  • こんにちは。中川俊輔 です。

     

    ファクトさん、 Azuleanさん、大変参考になる回答ありがとうございます。

     

    兼田さんへ

    その後いかかでしょうか?問題は解決されましたか?

    問題解決に大変参考になる回答のようでしたので、ファクトさん、 Azuleanさんの回答へ

    回答済みチェックをつけさせていただきました。

    兼田さんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2007年12月25日 6:25