2013-08-01 3 views
0

Когда я запускаю следующий код (в событии), чтобы удалить строку «DoNotShowSafeBootPages = Yes», ​​я получаю эту ошибку «Процесс не может получить доступ к файлу» C: \ cfig.ini «потому что он используется другим процессом».WPF Vb.net Удалить конкретную ошибку строки

 Sub DeleteLineSM() 
    Dim line As String = Nothing 
    Dim line_to_delete As String = "DoNotShowSafeBootPage=Yes" 

    Using reader As New StreamReader("C:\cfig.ini") 
     Using writer As New StreamWriter("C:\cfig.ini") 
      While (reader.ReadLine()) IsNot Nothing 
       If [String].Compare(line, line_to_delete) = 0 Then 
        Continue While 
       End If 

       writer.WriteLine(line) 
      End While 
     End Using 
    End Using 
End Sub 

Все, что я пытаюсь сделать, это удалить указанную выше строку из текстового файла. Может кто-нибудь мне помочь?

+0

Я бы написал его больше как 'var lines = IO.File.ReadAllLines (path); IO.File.WriteAllLines (path, lines.Except (deleteTheseLinesList)); 'где' deleteTheseLinesList' - список строк, которые вы хотите удалить. – asawyer

+0

Ну, вы открываете файл дважды, один раз с читателем, один раз с писателем. –

ответ

1
Sub DeleteLineSM() 
Dim lines As New List(Of String) 
Dim line_to_delete As String = "DoNotShowSafeBootPage=Yes" 
Using reader As New StreamReader("C:\cfig.ini") 
    'need a looping mechanism 
    While Not reader.EndOfStream 
     'add to our list 
    lines.Add(reader.Readline) 
    End While 
End Using 
    'check if the delete text exist and then delete it 
If lines.Contains(line_to_delete) Then lines.Remove(line_to_delete) 
    'overwrite the file 
Using writer As New StreamWriter("C:\cfig.ini") 
    For Each line In Lines 
    writer.WriteLine(line) 
    Next 
End Using 
End Sub 
Смежные вопросы