我有一个应用程序,如果该文件尚不存在,则会创建一个文本文件,然后向其写入内容。当我创建并立即写入文件时,它第一次工作得很好。我的问题是,下次执行此代码并且文件已经创建时,它会在我尝试写入文件时抛出异常。我得到“文件被另一个进程使用”错误。
所以我创建它之后似乎需要关闭文件?我不知道怎么做,但它可能非常简单。我会发布一些代码,但它不是必需的,我只是使用一个香草味的字符串构建器和流编写器。
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
答案 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)
此方法创建的FileStream对象具有默认的FileShare 无价值;没有其他进程或代码可以访问创建的文件 直到原始文件句柄关闭。
运行File.Create()
方法后,您有一个打开的FileStream句柄。
答案 3 :(得分:-1)
您错过了处理某些图像,可能是当前图像或原始图像
您可以像CurrImage.Dispose() & OriginalImage.Dispose()