Unzip Problem!

12/26/2013 18:05 Darkhomer#1
Hallo Epvpers,

Ich habe Folgendes Problem ich habe diesen Code gefunden und der Funktioniert auch mit Pfad Angabe (z.B: C:/ or D:/), ich möchte jetzt aber nicht erst ein Pfad angeben sonder den direkten Pfad (./) eintragen aber das geht so nicht :O


Code:
Dim sc As New Shell32.Shell()
IO.Directory.CreateDirectory("./test")
Dim output As Shell32.Folder = sc.NameSpace("./test")
Dim input As Shell32.Folder = sc.NameSpace("./ZipFile.zip")
output.CopyHere(input.Items, 4)
(Beim Testlauf erscheint der Fehler: Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist aufgetreten)

So Funktioniert es nicht, wenn ich jetzt aber C:/test und C:/ZipFile.zip angebe geht es. Funktioniert das auch irgendwie so das der den Pfad nimmt wo die EXE drin ist??(Standard: ./)


MfG: Darkhomer
12/26/2013 19:33 'Heaven.#2
Code:
 Dim path As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
12/26/2013 23:14 Darkhomer#3
was soll ich damit anfangen, soll ich es Hinzufügen? wenn ja WO?

PS. Bin noch nicht lange dabei in .NET Languages :/

MfG!
12/26/2013 23:22 'Heaven.#4
Das ist der aktuelle Pfad des Programmes, den musst du mit deinem Ordner in Verbindung bringen
12/27/2013 02:17 Syc#5
Quote:
Originally Posted by Waka Toa View Post
Code:
 Dim path As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
Warum nicht

Code:
Application.StartupPath()
?
12/27/2013 10:11 'Heaven.#6
In einer Konsolenanwendung gibt es die Klasse Application nicht
12/27/2013 11:13 tolio#7
in der folgenden kleinen testanwendung ist My.Application.Info.DirectoryPath um den faktor 30-50 schneller als der via Reflection das zu machen. Reflection ist zwar schön und inovativ aber auch sehr langsam und sollte vermieden werden wenn es auch einen anderen Weg gibt

Code:
    Sub Main()
        Dim sw As Stopwatch = New Stopwatch
        sw.Start()
        Dim p1 As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
        sw.Stop()

        Dim sw2 As Stopwatch = New Stopwatch
        sw2.Start()
        Dim p2 As String = My.Application.Info.DirectoryPath
        sw2.Stop()


        Console.Out.WriteLine(p1 & vbCrLf & sw.ElapsedMilliseconds & vbCrLf)
        Console.Out.WriteLine(p2 & vbCrLf & sw2.ElapsedMilliseconds & vbCrLf)
        Console.In.ReadLine()
    End Sub
12/27/2013 12:14 'Heaven.#8
Seltsam, bei mir benötigt My.Application 2510 Ticks und Reflection grade mal 68

[Only registered and activated users can see links. Click Here To Register...]

Am schnellsten wäre immer noch

Code:
Thread.GetDomain().BaseDirectory
12/27/2013 19:47 Darkhomer#9
ok, jetzt steige ich da gar nicht mehr durch,

ich möchte ein Code haben der z.b die test.zip Datei in den neu erstellten Ordner test Entpackt für eine Windows Form Anwendung, die ich mit einem Button starten kann ...

Bitte schreibt die Namen GROSS die ich noch ändern muss den durch diese Codes die ihr mir geschickt habt Check ich gerade nicht durch
12/27/2013 20:22 'Heaven.#10
Code:
Dim sc As New Shell32.Shell()

Dim myDirectory As String = GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

Dim path as String = Path.Combine(myDirectory,"test")

If Not Directory.Exists(path)
IO.Directory.CreateDirectory(path)
End If

Dim output As Shell32.Folder = sc.NameSpace(path)
Dim input As Shell32.Folder = sc.NameSpace(Path.Combine(myDirectory,"ZipFile.zip"))
output.CopyHere(input.Items, 4)
Habs nicht getestet, aber so in etwa müsste das aussehen
12/27/2013 21:31 Darkhomer#11
Nein Funktioniert nicht mit einer Windows Form Anwendung -,-
12/27/2013 22:36 'Heaven.#12
Dann sag doch mal explizit, was nicht funktioniert
12/27/2013 23:34 Darkhomer#13
GetDirectiryName wurde nicht deklariert ...

path.Combine ist kein Member von String

Directory wurde nicht deklariert

:/ habe aber jetzt ein anderen Code der macht zumindest schon mal 50% von dem was ich will.


nur das ich noch Manual die Datei auswählen muss ist blöd


Öffnet zwar den Richtigen Pfad, aber sollte schon den Pfad nehmen wo die exe drin ist und automatisch die Datei test.zip entpacken

so wie der Code jetzt ist muss ich die noch selber Auswählen
Code:
        Using ofd As New OpenFileDialog
            ofd.Filter = "ZipFile|*.zip"
            If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
                Dim file As String = ofd.FileName
                Dim cu As New ClassUnzip(file, Path.Combine(Path.GetDirectoryName(file), "unzip_folder"))
                AddHandler cu.UnzipFinishd, AddressOf Unziped
                cu.UnzipNow()
            End If
        End Using
Code:
    Private Sub Unziped()
        MessageBox.Show("Unzipping finished")
    End Sub


evtl versteht man es so besser:

Ich Drücke den Button,
Es sucht selber die Datei "test.zip" in den Pfad wo die "EXE" drin ist.
und entpackt diese in den "test" Ordner
12/28/2013 01:15 'Heaven.#14
Path.Combine
Path.GetDirectoryName
12/28/2013 01:27 Darkhomer#15
WOW so rein geschmissen ...

was soll ich damit machen?

wenn ich es in das ändere passiert nix bleibt trotzdem der Fehler