unrar.dll - Delete after extract

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von Hansbald.

    unrar.dll - Delete after extract

    Hallo VB-Paradise :)

    Ich habe da ein kleines Problem mit der unrar.dll.
    Ich entpacke also mein Archive und wenn es fertig ist möchte ich es löschen.
    Das löschen versuche ich über Io.File.Delete aber die datei "wird von einem anderen Prozess benutzt", wie kann ich also die rar "schließen" um sie zu löschen?

    Hier ist mal mein Code:

    VB.NET-Quellcode

    1. Imports RARNET
    2. Imports System.ComponentModel
    3. Public Class frmMain
    4. Public WithEvents downloader As New System.Net.WebClient
    5. Private Sub list_emus_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles list_emus.SelectedIndexChanged
    6. lb_ready.Text = "Ready to download " & list_emus.SelectedItem & "!"
    7. End Sub
    8. Private Sub bt_start_download_Click(sender As System.Object, e As System.EventArgs) Handles bt_start_download.Click
    9. If My.Computer.Network.IsAvailable = True Then
    10. frmDownloader.Show()
    11. Dim url As String
    12. Dim output As String '= "D:\Projekte\Emulator Suite\test.rar"
    13. output = tb_save_path.Text & "\emu.rar"
    14. MsgBox(output)
    15. 'Check listbox and choose url
    16. url = "mein_dl_link"
    17. downloader.DownloadFileAsync(New Uri(url), output)
    18. Else
    19. MsgBox("ERROR" & vbNewLine & "There was a problem with your Internet connection!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
    20. End If
    21. End Sub
    22. Private Sub downloader_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles downloader.DownloadProgressChanged
    23. frmDownloader.ProgressBar1.Value = e.ProgressPercentage
    24. frmDownloader.lb_percent_download.Text = e.ProgressPercentage & "%"
    25. End Sub
    26. Private Sub downloader_downloadComplete(sender As Object, e As AsyncCompletedEventArgs) Handles downloader.DownloadFileCompleted
    27. MsgBox("Download Complete!" & vbNewLine & "The file will now be extracted.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
    28. startExtract(tb_save_path.Text & "\emu.rar", tb_save_path.Text)
    29. End Sub
    30. Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    31. End Sub
    32. Public Sub startExtract(ByVal INPUT As String, ByVal Output As String)
    33. Dim d As New Decompressor(input)
    34. AddHandler d.OnUnpack, AddressOf Unpacked
    35. AddHandler d.Unpacking, AddressOf InProgress
    36. d.UnPackAll(output)
    37. End Sub
    38. Public Sub Unpacked(ByVal r As Decompressor.RAREntry)
    39. MsgBox("The " & list_emus.SelectedItem & " Emulator is downloaded and extracted.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
    40. frmDownloader.Hide()
    41. DeleteRAR(tb_save_path.Text & "\emu.rar")
    42. End Sub
    43. Public Sub InProgress(ByVal fTotalFileSize As Long, ByVal fUnpacked As Long, ByRef Disposition As RARNET.Decompressor.RarDisposition)
    44. If fTotalFileSize = 0 Then Exit Sub
    45. If fTotalFileSize = 0 Then Me.Dispose(True)
    46. frmDownloader.ProgressBar2.Value = CInt(CDbl(Format(fUnpacked / fTotalFileSize)) * 100)
    47. frmDownloader.lb_percent_extract.Text = CInt(CDbl(Format(fUnpacked / fTotalFileSize)) * 100) & "%"
    48. frmDownloader.Refresh()
    49. End Sub
    50. Public Sub DeleteRAR(ByVal path As String)
    51. Threading.Thread.Sleep(2000)
    52. IO.File.Delete(path)
    53. End Sub
    54. Private Sub bt_save_browse_Click(sender As System.Object, e As System.EventArgs) Handles bt_save_browse.Click
    55. Dim fbd As New FolderBrowserDialog
    56. If fbd.ShowDialog = Windows.Forms.DialogResult.OK Then
    57. tb_save_path.Text = fbd.SelectedPath
    58. End If
    59. End Sub
    60. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    61. DeleteRAR(tb_save_path.Text & "\emu.rar")
    62. End Sub
    63. End Class



    Ich habe versucht die DeleteRAR Sub in dem Unpacked() event zu nutzen - erfolgslos...

    Vielen dank für die Hilfe schonmal :P

    Und was ist der unterschied zwischen VB2010/12 und VB.net? Ich dachte VB6 wäre das letzte PureBasic Studio.
    MFG
    Dustin~

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Hansbald“ ()

    Wennst den Code nicht richtig formatierst wird dir wohl niemand helfen...
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Das war nur ein kurzer Test...

    Das event wird aufgerufen wenn die datei entpackt ist. Aber es geht nicht.
    Wenn ich ne Sekunde später auf den Button zum löschen klicke löscht er die rar...

    Ob sie disposed werden muss weiß ich eben nicht :/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Hansbald“ ()

    du brauchst nicht den kompletten Post über deinem zu zitieren - der Post steht ja direkt drüber.

    Hat auch keinen Sinn, iwelchen TestCode zu posten, der dann garnet so gemeint war.

    Ob du den Unpacker disposen musst, kannst du im ObjectBrowser herausfinden, nämlich, wenn das Teil IDisposable implementiert.
    Also wenn ich im ObjectBrowser nach IDisposable suche finde ich nur das:

    VB.NET-Quellcode

    1. Public Interface IDisposable
    2. Member von System
    3. Zusammenfassung:
    4. Definiert eine Methode zur Freigabe von reservierten Ressourcen.


    Also denke ich nicht, oder?
    ein Dispose-event gibts ja auch nicht, es gibt das IDisposable - Interface.
    Kann auch sein, dass Decompressor dieses Interface nicht implementiert, aber ich tätes halt doch eher erwarten.


    Was fängst du mit

    Edr schrieb:

    du solltest erst löschen, wenn der UnPacker fertig ist.
    an?
    Wie gesagt ich lösche die File im Unpacked Event....
    Da ist er schon fertig.
    Das ist ja das komische, wenn ich das FileDelete da raus nehme und ne Sekunde später mit nem button ausführe geht es.
    Ich weiß aber nicht wie ich sonst die datei nach dem entpacken löschen soll...
    Ich könnte nen timer laufen lassen der die Progressbar überprüft aber das wäre ziemlich unschön...

    Hier ist ein Bild vom ObjektManager:

    Hansbald schrieb:

    Wie gesagt ich lösche die File im Unpacked Event....
    Da ist er schon fertig.
    Das ist ja das komische, wenn ich das FileDelete da raus nehme und ne Sekunde später mit nem button ausführe geht es.
    Eindeutiger kann der Beweis kaum geführt werden, dasser eben noch nicht fertig ist :P.


    Hübsches Bildle.
    Nu musste nurnoch den Knoten "Decompressor" erweitern, um zu gucken, was dort an Basisklassen angegeben ist (meinGott, dassis in ObjectBrowser doch vorgeturnt!)