"Файл используется другим процессом" после 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()

Другие вопросы по тегам