1

メモ帳としても機能する暗号化プログラム(CryptoMatic)を作っています。次のコードを持つ Open 関数があります。

    Dim r As New StreamReader(filename)
    Dim text As String = r.ReadToEnd
    txtFileContents.text = text

    r.Dispose()
    r.Close()

保存ボタンと名前を付けて保存ボタンがあり、保存ボタンはファイルが以前に保存されたかどうかを確認します。はいの場合、次のコードでそのファイルに書き込もうとしています:

    Dim myFileStream As New System.IO.FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.None)
    myFileStream.Lock(0, 100)

    Dim myWriter As New System.IO.StreamWriter(myFileStream)
    myWriter.WriteLine(text)

    myWriter.Flush()
    myWriter.Close()
    myFileStream.Close()

    myFileStream.Unlock(0, 100)

保存ボタンを押すと、次のエラーが表示されます。

    The process cannot access the file 'C:\Users\VisualTech\Documents\Visual Studio            2010\Projects\CryptoMatic Update\CryptoMatic Update\bin\Debug\text.txt' because it is being    used by another process.

アプリケーションが停止します。誰か助けてください。

4

1 に答える 1

1

上記のコードを試してみたところ、次の 2 つのことに気付きました。

  • myFileStream.Lockすでに開いているため、呼び出しは必要ありませんFileShare.None
  • myFileStream.Unlock(0, 100)への呼び出し後に呼び出す ことはできません myFileStream.Close()

だから私はあなたのコードをこのように書き直しました。

Sub Main
    Dim text = "This is a text to write in the stream"
    Using myFileStream As New System.IO.FileStream("D:\temp\testlock.txt", FileMode.Append, FileAccess.Write, FileShare.None)
        Using myWriter As New System.IO.StreamWriter(myFileStream)
            myWriter.WriteLine(text)
        End Using
    End Using
End Sub
于 2012-12-05T09:23:58.057 に答える