【问题标题】:Cannot write to a file after reading it with IO.StreamReader使用 IO.StreamReader 读取文件后无法写入文件
【发布时间】:2012-12-05 06:55:15
【问题描述】:

我正在制作一个也可用作记事本 (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.

申请停止了,谁能帮帮我?

【问题讨论】:

    标签: vb.net filestream bufferedreader .net


    【解决方案1】:

    我已经尝试了您上面的代码并注意到两件事:

    • 您不需要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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2013-07-17
      • 1970-01-01
      相关资源
      最近更新 更多