2016-04-13 5 views
0

Ich habe eine Anwendung, die eine TXT-Datei erstellen und schreiben Sie ein Protokoll. Ich erstelle die txt-Datei mit dem folgenden Code:.txt-Datei mit vb.net löschen

  If System.IO.File.Exists(sFileName) = True Then 
       System.IO.File.Delete(sFileName) 
      End If 

      'System.IO.File.Create(sFileName) '.dispose 
      Dim objWriter As New System.IO.StreamWriter(sFileName, True) 

Wenn ich das Protokoll (mit objWriter.WriteLine) fertig zu schreiben und es (objwriter.close und objwriter.dispose), schicken Sie es per Post und müssen schließen um es zu löschen.

Um die Datei ich diesen Code verwenden, um zu löschen:

For i = 0 To 10 
       Try 
        'System.IO.File.Delete(sFileName) 

        'My.Computer.FileSystem.DeleteFile(sFileName, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.DeletePermanently) 

        My.Computer.FileSystem.DeleteFile(sFileName) 
        Exit For 
       Catch ex As Exception 
        If i = 10 Then 
         invioMailTest(ex.ToString) 
        End If 
        Threading.Thread.Sleep(1000) 
       End Try 
      Next 

Der Code in der lokalen funktioniert gut, aber wenn ich es auf dem Server ausgeführt (als Administrator) es gibt mir die folgende Fehlermeldung:

System.IO.IOException: The process cannot access the file 'C:\Log_Eventi\Export log 2016-04-13.txt' because it is being used by another process.

ich weiß nicht, wie es zu löschen und ich bin auf sie zu viel Zeit zu verlieren ....

+0

http://stackoverflow.com/a/26741192/2118383 –

+1

Mögliches Duplikat von [IOException: Der Prozess kann nicht auf die Datei 'Dateipfad' zugreifen, da sie von einem anderen Prozess verwendet wird (http://stackoverflow.com)/questions/26741191/ioexception-the-process-kann nicht auf die Datei-Datei-Pfad zugreifen-weil-es-ist-sein) –

+0

Hängt davon ab, welcher Prozess es verwendet. Wenn es Ihr Programm ist, dann vergewissern Sie sich, dass Sie die Datei immer richtig geschlossen haben. Wenn es ein anderes Programm ist, wird das schwieriger. Außerdem müssen Sie die Datei nicht direkt vor dem Öffnen löschen, sondern öffnen Sie sie nicht als Anhang. –

Antwort

0

Wenn Sie Ihre Datei erstellen ich vermute, Sie verwenden

System.IO.File.Create(sFileName) 

Sie können dieses Problem überwinden, indem Sie diesen Code verwenden:

Using File.Create(sFileName) 

End Using 

setzen alle Code, der mit sFileName innerhalb Using beschäftigt.

andere Lösungen: Verwendung Close, wenn Sie es schaffen

System.IO.File.Create(sFileName).Close() 

Verwendung filestream

Dim fs As FileStream = File.Create(sFileName) 
do your work here 
fs.Close() 
+0

Ich habe alle Ihre Lösungen versucht, aber ich habe immer noch das Problem. Ich habe keine anderen Ideen, ich habe versucht, eine Schlafanweisung von 10 Sekunden nach der file.dispose und anderen 20 Sekunden nach dem Senden der E-Mail. Aber Datei noch in Verwendung ... Ich habe versucht, die Datei mit den folgenden Befehlen zu erstellen: - System.IO.File.Create (sFileName).Schließen() - mit dem Filestream -und die Verwendung der Anweisung –

+0

kann ich sehen, wie Sie diese Datei erstellen – Claudius

+0

vielleicht anstelle von objectWriter verwenden Sie einfach System.IO.File.AppendAllText. Es ist auch irgendwie schwer zu glauben, dass die Verwendung nicht funktioniert hat – Claudius

0

Sie erwähnen "per Post schicken", so dass das Problem wahrscheinlich ist, dass die Anlage noch zu sein gehalten vom E-Mail-System des Servers.