Moin Forum,
ich habe ein Problem.
Ich schilder zunäch mal kurz die Aufgabe:
Es werden verschiede gerade verwendete Dateien nicht mehr benötigt (sie wurden vorher geöffnet, gelesen, geschlossen).
Direkt nach dem Schlißen kann ich sie noch nicht löschen:
Da diese Dateien auch nach einem Absturz des Computer (kommt leider vor!) gelöscht werden sollen, erstelle ich eine Datei ohne Inhalt ('Test_0007.dat_used.delete'), die Kennzeichnet, dass sie gelöscht werden können.
Beim Neustart will ich mir dann die Dateien anschauen und die Löschen zu der es die 2. Datei gibt.
Beim 'normalen' Betrieb versucht eine Klasse nun zyklisch die beiden Dateien zu löschen.
Dieses dauert oft recht lange und passiert oft erst, wenn ich das Fenster, welches diesen Prozess steuert, schließe.
Die Frage ist
Warum bleiben die Dateien geblockt? (Bzw. was mach ich falsch )
Vielen Dank schon mal im Voraus
Gruß
Tukuan
Achso: Und hier der SourceCode der Lösch-Klasse.
ich habe ein Problem.
Ich schilder zunäch mal kurz die Aufgabe:
Es werden verschiede gerade verwendete Dateien nicht mehr benötigt (sie wurden vorher geöffnet, gelesen, geschlossen).
Direkt nach dem Schlißen kann ich sie noch nicht löschen:
System.IO.IOException {"The process cannot access the file 'E:\temp\Test_0007.log' because it is being used by another process."}
Da diese Dateien auch nach einem Absturz des Computer (kommt leider vor!) gelöscht werden sollen, erstelle ich eine Datei ohne Inhalt ('Test_0007.dat_used.delete'), die Kennzeichnet, dass sie gelöscht werden können.
Beim Neustart will ich mir dann die Dateien anschauen und die Löschen zu der es die 2. Datei gibt.
Beim 'normalen' Betrieb versucht eine Klasse nun zyklisch die beiden Dateien zu löschen.
Dieses dauert oft recht lange und passiert oft erst, wenn ich das Fenster, welches diesen Prozess steuert, schließe.
Die Frage ist
Warum bleiben die Dateien geblockt? (Bzw. was mach ich falsch )
Vielen Dank schon mal im Voraus
Gruß
Tukuan
Achso: Und hier der SourceCode der Lösch-Klasse.
VB.NET-Quellcode
- ''' <summary>
- ''' This class handles the deleting of old used files which are used by methodes and still unter OS control at this time.
- ''' The class trys continously to delete the files.
- ''' </summary>
- ''' <remarks></remarks>
- Public Class DeleteSingleFileClass
- Public Const UsedFilesAnnex As String = "_used.delete"
- Public Class Files2Delete
- Friend FullFileName As String
- Friend AdditionalFullFileName As String
- Friend CoulndtDeleteCounter As Integer
- Public Sub New(ByVal _FullFileName As String)
- FullFileName = _FullFileName
- AdditionalFullFileName = FullFileName & UsedFilesAnnex
- IO.File.Create(AdditionalFullFileName)
- End Sub
- Public Sub New(ByVal _FullFileName As String, ByVal _AdditionalFullFileName As String)
- FullFileName = _FullFileName
- AdditionalFullFileName = _AdditionalFullFileName
- End Sub
- End Class
- 'Private DeleteFilesTimer As System.Threading.Timer
- Private WithEvents DeleteFilesTimer As System.Windows.Forms.Timer
- Private FileList2Delete As List(Of Files2Delete)
- Private TempFileList As List(Of Files2Delete)
- ''' <summary>
- '''
- ''' </summary>
- ''' <remarks></remarks>
- Public Sub New()
- FileList2Delete = New List(Of Files2Delete)
- TempFileList = New List(Of Files2Delete)
- 'DeleteFilesTimer = New System.Threading.Timer()
- DeleteFilesTimer = New System.Windows.Forms.Timer
- DeleteFilesTimer.Interval = 2000 ' 10 s
- End Sub
- ''' <summary>
- ''' Add files to 2 file list
- ''' </summary>
- ''' <param name="file"></param>
- ''' <remarks></remarks>
- Public Sub AddFile2FileList(ByVal file As Files2Delete)
- TempFileList.Add(file)
- DeleteFilesTimer.Start()
- End Sub
- ''' <summary>
- ''' Delete all files in the list. Procedure ist called by a timer continously.
- ''' </summary>
- ''' <remarks></remarks>
- Private Sub DeleteFilesFromList() Handles DeleteFilesTimer.Tick
- FileList2Delete.AddRange(TempFileList)
- TempFileList.Clear()
- Dim deletedList As New List(Of Integer)
- For i = 0 To FileList2Delete.Count - 1
- Try
- 'delete 'Masterfile'
- If IO.File.Exists(FileList2Delete(i).FullFileName) Then _
- IO.File.Delete(FileList2Delete(i).FullFileName)
- 'if no exception occur file is deleted -> delete 'slave file'
- If IO.File.Exists(FileList2Delete(i).AdditionalFullFileName) Then _
- IO.File.Delete(FileList2Delete(i).AdditionalFullFileName)
- deletedList.Add(i)
- Catch ex As Exception
- 'file is blocked by the system do nothing...
- FileList2Delete(i).CoulndtDeleteCounter += 1
- End Try
- Next
- 'remove entries from the list...
- For i = deletedList.Count - 1 To 0 Step -1
- FileList2Delete.RemoveAt(deletedList(i))
- Next
- If FileList2Delete.Count = 0 Then DeleteFilesTimer.Stop()
- End Sub
- End Class