"Файл используется другим процессом" после File.Create()
У меня есть приложение, которое создает текстовый файл, если файл еще не существует, а затем что-то записывает в него. Это прекрасно работает в первый раз, когда я создаю и сразу записываю в файл. Моя проблема в том, что в следующий раз, когда этот код выполняется и файл уже создан, он выдает исключение, когда я пытаюсь записать в файл. Я получаю сообщение об ошибке "Файл используется другим процессом".
Так что может показаться, что мне нужно закрыть файл после его создания? Я не понимаю, как это сделать, но, вероятно, это что-то очень простое. Я выложу некоторый код, но в этом нет необходимости, я просто использую сборщик строк со вкусом ванили и потоковую запись.
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 ответа
Проблемный код / строка заключается в следующем
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
Вы можете удалить имеющуюся у вас логику создания файла и позволить StreamWriter создать файл.
http://msdn.microsoft.com/en-us/library/36b035cb%28v=vs.110%29.aspx
Посмотрите на документацию:
Объект FileStream, созданный этим методом, имеет значение FileShare по умолчанию None; никакой другой процесс или код не могут получить доступ к созданному файлу, пока не будет закрыт оригинальный дескриптор файла.
У вас есть открытый дескриптор FileStream после запуска File.Create()
метод.
Вы пропустили, чтобы избавиться от изображения, это может быть текущее изображение или исходное изображение, вы можете сделать это, как CurrImage.Dispose() & OriginalImage.Dispose()