Laden...

Entpacken einer RAR im C# code

Erstellt von MR_TXT vor 13 Jahren Letzter Beitrag vor 13 Jahren 8.510 Views
M
MR_TXT Themenstarter:in
3 Beiträge seit 2010
vor 13 Jahren
Entpacken einer RAR im C# code

Hallo,
ich habe bereits viel gelesen und ausprobiert, bald einen ganzen Tag damit verbracht, aber noch keine – für mich verständliche – Lösung für mein Problem gefunden.
Es geht konkret um folgendes.
Ich habe EIN (!) RAR (!) Archiv, das wird im Programm von einem Server kopiert und soll auf der lokalen Festplatte anschließend noch entpackt werden.
Nach Möglichkeit soll KEIN weiteres Programm gebraucht werden, nur Sachen, die ich in das Release des Programms mit implementieren kann, am besten direkt zur exe hinein.
Da ich noch recht frisch in C# bin, kenne ich mich leider noch nicht so sehr mit den ganzen Klassen und Methoden geschweige denn Erweiterungen mit dll’s aus.
Wäre nett, wenn ihr mir konkrete Hilfestellungen im Sinne von z.B. Verweisen auf Seiten, wo das RAR per Code entpacken behandelt wird, gebt und vielleicht ein paar Worte grob darüber verliert 😉

175 Beiträge seit 2010
vor 13 Jahren

Bemühe doch mal google und suche nach "C# + unrar" und bereits der zweite Treffer sollte Dein Freund sein...

http://www.example-code.com/csharp/rar_unrar.asp

Damit hast Du das "unrar" zwar nicht in der EXE, aber wenigstens eine nette C# Lösung.

Wenn Du es in der EXE haben willst, dann kannst Du ja den C-Source von unrar nehmen und nach C# portieren - ist wahrscheinlich nicht einmal soooo aufwendig.

Und wenn es die absolute Turnschuh-Variante sein soll dann bette eine unrar.exe in Deine eigene EXE ein und schreib diese zur Laufzeit als temporäre Datei auf die Platte. Dann das RAR-Archiv downloaden und mit der abgelegten unrar.exe auspacken. Lizenz beachten!

Bye,
Michael

Debuggers don't remove Bugs, they only show them in Slow-Motion.

X
44 Beiträge seit 2006
vor 13 Jahren

http://www.rarlab.com/rar_add.htm <-- Unrar.dll

Codebeispiele kriegst da auch gleich. Sollte dein Problem eigentlich lösen 😃

M
MR_TXT Themenstarter:in
3 Beiträge seit 2010
vor 13 Jahren

Hallo,
besten dank für die Informationen.

m.knigge, wie gesagt habe ich schon viel gelesen und gegoogelt gehabt, aber wenn mna für sich nichts passendes findet, da man sich überhaupt nicht auskennt, ist das schwierig. Werde mir den Link mal zu Gemüt führen 😉

xploid, die unrar.dll hatte ich auch schon mal gefunden und ausprobiert, aber komischerweise konnte ich sie nicht referenzieren. Die Fehlermeldung weiß ich allerdings gerade nicht mehr. Evtl habe ich es aber auch falsch gemacht, werde es nochmal versuchen.

D
201 Beiträge seit 2007
vor 13 Jahren

Ich kann dir ICSharpCode.SharZipLib empfehlen (einfach mal googlen)
Setze ich erfolgreich ein.
Die Lib ist OpenSource, also könntest du's auch in die exe mit reinkompilieren.

mfg

2.082 Beiträge seit 2005
vor 13 Jahren

Ich kann dir ICSharpCode.SharZipLib empfehlen Kann das denn mittlerweile RAR-Dateien? Oder etwas schon immer? Wir setzen das nur für Zip ein.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

175 Beiträge seit 2010
vor 13 Jahren

Kann das denn mittlerweile RAR-Dateien? Oder etwas schon immer? Wir setzen das nur für Zip ein.

Nö 😉 ZIP, gzip, Bzip2 und tar

Debuggers don't remove Bugs, they only show them in Slow-Motion.

Gelöschter Account
vor 13 Jahren

aber 7zip kann das und es gibt eine .net api....
http://www.codeproject.com/KB/DLL/cs_interface_7zip.aspx

ich habe bislang mit 7zip die besten erfahrungen gemacht... vor allem was performance angeht, ist 7zip ungeschlagen.

X
44 Beiträge seit 2006
vor 13 Jahren

Statt endlos Zeit mit der Suche zu verbringen, empfehle ich dir wärmstens die unrar.dll zum laufen zu bringen. SharZipLib kann rar sowieso nicht...

Du brauchst die unrar.dll nicht zu referenzieren. Das geht auch gar nicht, da diese in C++ und nicht mit dem .NET Framework geschrieben wurde.

Du brauchst die lediglich neben deiner exe im selben Pfad zu halten. Wenn du die unrar.dll von rarlab herunterlädst, kriegst du eine Klasse mitgeliefert, welche bereits alle DllImports erledigt. Du brauchst also nur noch die Funktionen aufzurufen.

Es ist wirklich sehr einfach, die DLL zu verwenden. Ich schreib dir mal kurz wies geht, das sollte wirklich reichen (sonst lern lieber erst die Basics...):

Wenn du die unrar.exe entpackst zbsp nach C:\Program Files\UnrarDLL hast du direkt in diesem Verzeichnis die Unrar.dll, welche du am besten in das Verzeichnis deines Programmes kopierst. Kannst die DLL auch in dein Projektverzeichnis kopieren und in deine Solution aufnehmen (nicht referenzieren, das geht nicht!) und dann unter den Eigenschaften einstellen, dass diese Datei immer in den output Ordner kopiert wird.
Damit du nun auf die Funktionen in der DLL zugreiffen kannst, findest du unter C:\Program Files\UnrarDLL\Example\C# die Datei Unrar.cs. Die musst du in dein Projekt einbinden.
Hier ein kleines Beispiel, um ein Rar Archiv mit dieser Klasse zu entpacken:


var unrar = new Unrar();
unrar.Open(@"c:\Test.rar", Unrar.OpenMode.Extract);
while (unrar.ReadHeader())
{
  unrar.ExtractToDirectory(@"c:\drop");
}

Da unrar IDisposable implementiert, natürlich brav mit using arbeiten 😉 Aber vom Prinzip her sollte es eigentlich klar werden so.

Du solltest so eigentlich zu deinem Ziel kommen, good luck 😃

T
179 Beiträge seit 2007
vor 13 Jahren

gibts eigentlich irgendwas (außer der rar.exe von rarlabs) um .rar-Dateien in .Net zu erstellen?

M
MR_TXT Themenstarter:in
3 Beiträge seit 2010
vor 13 Jahren

Ich habe es jetzt mit der Unrar.dll umsetzen könne. Für meine Zwecke vollkommen ausreichend.
Vielen dank für die vielen Informationen!

1.820 Beiträge seit 2005
vor 13 Jahren

Hallo!

@t-master:
Wie Jack30lena bereits weiter oben geschrieben hat, kann man mit 7zip und dem C#-Interface arbeiten. Mit reinen .NET-Bordmitteln ohne externe Komponenten geht es nicht.

Nobody is perfect. I'm sad, i'm not nobody 🙁