File.Create()之后“另一个进程正在使用文件”

时间:2013-10-31 11:36:30

标签: .net vb.net io stringwriter

我有一个应用程序,如果该文件尚不存在,则会创建一个文本文件,然后向其写入内容。当我创建并立即写入文件时,它第一次工作得很好。我的问题是,下次执行此代码并且文件已经创建时,它会在我尝试写入文件时抛出异常。我得到“文件被另一个进程使用”错误。

所以我创建它之后似乎需要关闭文件?我不知道怎么做,但它可能非常简单。我会发布一些代码,但它不是必需的,我只是使用一个香草味的字符串构建器和流编写器。

    Private Sub createFileLocations()
        If Not Directory.Exists("./Path") Then
            Directory.CreateDirectory("./Path")
        End If
        If clsGeneralSettings.Printer1 IsNot Nothing Then
            If Not File.Exists("./Path/File1" & ".txt") Then
                File.Create("./Path/File1" & ".txt")
            End If
        End If
    End Sub


Private Sub AppendTextFile(randomId As String, PrintDate As Date, PrintName As String)
    Try
        Dim _stringBuilder As StringBuilder = New StringBuilder
        Dim _StreamWriter As StreamWriter
        Dim fileName As String
        If PrintName = clsGeneralSettings.Printer1 Then
            fileName = "./Path/File1" & ".txt"
            qPrinter1.Enqueue(randomId)
            If qPrinter1.Count > 10 Then
                qPrinter1.Dequeue()
            End If
             _stringBuilder.AppendLine(PrintDate + " | " + randomId)
            _StreamWriter = New StreamWriter(fileName, True)
        End If
        'Todo: Figure this out

        Using _StreamWriter
            _StreamWriter.Write(_stringBuilder.ToString)
            _StreamWriter.Flush()
            _StreamWriter.Close()
            _stringBuilder.Clear()
        End Using
    Catch ex As Exception
    End Try
End Sub

4 个答案:

答案 0 :(得分:13)

有问题的代码/行是这个

If Not File.Exists("./PalletQueue/Printer1" & ".txt") Then
  File.Create("./PalletQueue/Printer1" & ".txt")
End If
如果您想稍后写入该文件,

File.Create将返回您需要关闭的FileStream。 将代码更改为以下内容可以解决您的问题。

If Not File.Exists("./PalletQueue/Printer1" & ".txt") Then
  Dim file as FileStream = File.Create("./PalletQueue/Printer1" & ".txt")
  file.Close()
End If

答案 1 :(得分:3)

您可以删除文件创建逻辑,让StreamWriter创建文件。

http://msdn.microsoft.com/en-us/library/36b035cb%28v=vs.110%29.aspx

答案 2 :(得分:2)

查看the documentation

  

此方法创建的FileStream对象具有默认的FileShare   无价值;没有其他进程或代码可以访问创建的文件   直到原始文件句柄关闭。

运行File.Create()方法后,您有一个打开的FileStream句柄。

答案 3 :(得分:-1)

您错过了处理某些图像,可能是当前图像或原始图像  您可以像CurrImage.Dispose() & OriginalImage.Dispose()

那样执行此操作