- PR -

StreamReaderでClose、Disposeしたはずが

1
投稿者投稿内容
ボビン
常連さん
会議室デビュー日: 2007/02/05
投稿数: 45
投稿日時: 2008-02-26 12:00
こんにちは、StreamReaderでtxtファイルを読んだ後、
closeしてdisposeしているのですが、フォームを開いている間は
そのtxtファイルを開こうとすると、
「このファイルを書き込み許可で開くことができませんでした。」
というメッセージが表示されます。

まだつかんだままのようですが、なぜでしょうか?
ソースは以下のようにしました。
コード:
        Dim sr As StreamReader

        Try
            sr = New StreamReader(sDataPath, Encoding.GetEncoding(932))

            Try
                ' 読み込みできる文字がなくなるまで繰り返す
                While (sr.Peek() >= 0)

                    ' ファイルを 1 行ずつ読み込む
                    sData = sr.ReadLine()

                    ' 〜処理〜

                End While

            Finally
                If Not sr Is Nothing Then
                    sr.Close()
                End If

            End Try
        Finally
            If Not sr Is Nothing Then
                Dim hDisposable As IDisposable = sr
                hDisposable.Dispose()
            End If

        End Try


色々と調べてみましたが、解決できず投稿しました。
VB2005です。よろしくお願いします。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-02-26 12:14
・そのファイルへの書き込み権限の無いユーザーで実行している。
・そのファイルが読み取り専用属性になっている。
とか。


Usingステートメントをお勧めします。
#Tryでなければ表現できない場合もありますが。
あと、IsNot演算子ってのもあります。
ボビン
常連さん
会議室デビュー日: 2007/02/05
投稿数: 45
投稿日時: 2008-02-26 12:57
まどかさん、ご返答ありがとうございます。

>・そのファイルへの書き込み権限の無いユーザーで実行している。
>・そのファイルが読み取り専用属性になっている。

この二点については、確認しました。
また、txtファイルを読むフォームを閉じれば、メッセージは出なくなり
通常通り開けるようになります。

Usingステートメントも試してみます。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-02-26 13:07
下記のコードで問題なく動作しました。

コード:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim r As IO.StreamReader = Nothing

        Try
            r = New IO.StreamReader("c:\temp\test.txt")

            Do While Not r.EndOfStream
                r.ReadLine()
            Loop

            r.Close()

        Catch ex As Exception
        Finally
            r.Dispose()
        End Try


    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim w As New IO.StreamWriter("c:\temp.test.txt", True)
        w.Close()
        w.Dispose()

    End Sub



どこか他の場所で開いているということはないのでしょうか?
ボビン
常連さん
会議室デビュー日: 2007/02/05
投稿数: 45
投稿日時: 2008-02-26 13:13
>どこか他の場所で開いているということはないのでしょうか?

申し訳ありません!
ご指摘の通り、他の場所で開いていました。
txtファイルの内容をチェックする処理が別の場所にあり
そちらでcloseがされていませんでした。

お手数をおかけしてすみませんでした。
まどかさん、ご返答ありがとうございました。
1

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