Archiv verlassen und diese Seite im Standarddesign anzeigen : Aus 3 kaputten Downloads eine Datei machen
Ich habe heute versucht eine datei (bzw ein in 2 Teile gesplittetes rar-Archiv, insgesamt 160mb) aus dem Internet runterzuladen. Da ich hier nur Mobile Broadband habe, ist der Download auch recht langsam.
Beim ersten Download gab es beim Entpacken einen CRC-Fehler, und auch beim zweiten Download genau das gleiche. Am anderen Rechner ebenso.
Nun habe ich die datei genau 3 mal (bzw 3 x 2 Teile). Kann man diese irgendwie "vereinen" und daraus eine funktionierende Datei machen? Also angenommen jeweils zwei der drei Bits sind identisch, kann man ja das kaputte dann Ersetzen.
Die Idee klingt vielleicht bescheuert, dennoch wuerde ich gerne wissen ob es moeglich ist.
du kannst doch in winrar vor dem entpacken "defekte dateien behalten" aktivieren.
kommt jetzt nur drauf an was genau da gepackt wurde...
Klar, die Date ist dann jedoch aber defekt
TigersClaw
2010-05-28, 16:29:03
Dann war sie vor dem Download schon defekt.
du könntest mal versuchen die teile der verschiedenen downloadversuche zu mischen... vielleicht gibts ja ne kombination aus teilen die sich entpacken lässt.
ein tool für sowas kenne ich nicht, ist vermutlich auch schwer umzusetzen, da durch den cr-check nur geprüft wird, ob die datei in ordnung ist oder fehlerhaft. das erste falsche bit ließe sich noch direkt ermitteln, aber mehr nicht. die "länge" des fehlers in der datei kann man also nicht bestimmen. wenn jetzt die erste datei bei 50% einen crc fehler hat und die 2. bei 70% dann könnte das programm höchstens die erste datei von 50% auf 70% korrigieren; was natürlich unsinn wäre.
Flashget hatte mal eine funktion für zip dateien mit crc fehlern... wenn hier bei 70% ein fehler auftrat konnte man die fehlenden 30% erneut laden lassen. ob das mit rar dateien auch geht, und ob man dateien in flashget importieren kann weiß ich leider nicht.
mfg
Dein gewünschtes Programm.
Entpacken, dann auf der Konsole
java -jar jrep datei1 datei2 datei3 output
eingeben. Datei1, datei2, datei3 sind deine Fragmente, output der Name der Datei, die daraus gebaut werden muß.
Keine Ahnung, wie schnell das Zeug ist, dauert ggf. ne Weile. Vorher lieber ein Backup aller Dateien anlegen (man weiß ja nie :freak:), output wird automatisch überschrieben, falls sie schon existiert.
-huha
Vikingr
2010-05-28, 17:25:27
Es gibt da ein kleines Programm Namens "CRC Killer". Für eben solche Fälle.
HeldImZelt
2010-05-28, 17:26:11
Vergleiche die Dateien mit fc.exe oder total commander. Sind alle gleich, hat sich das schon erledigt. Unterscheiden sie sich, kannst du vielleicht manuell mit einem Hexeditor die Dateien reparieren. Alternativ die Dateien mit einem anderen Browser/Downloadmanager herunterladen.
Rooter
2010-05-28, 18:14:58
Ich würde auch sagen, erstmal die Dateien vergleichen, bzw. deren Prüfsummen anzeigen lassen.
Ich weis ja jetzt nicht wie huhas Programm genau vorgeht, ich würde die Dateien byteweise vergleichen und das Byte in die Outputdatei kopieren das in 2 von 3 vorkommt. Eine Software die sowas macht kenne ich aber auch keine.
MfG
Rooter
Ich vergleiche bitweise :uup:
Wollte der Threadersteller ja auch so.
Der Code ist ein wenig zusammengefrickelt (java ist in der Beziehung allerdings auch arg ungnädig), aber wer sich unbedingt schockieren und ihn sehen will, der meldet sich einfach.
-huha
Danke fuer die Muehe, aber ich habe die datei jetzt auf nem anderen Rechner mit echtem DSL runtergeladen (war in etwa 2000x so schnell wie bei mir X-D) und es lief probemlos. Dennoch ist das programm sicherlich sehr nuetzlich. Wie waers wenn du es auf 3DTools packst?
Ich vergleiche bitweise :uup:
Wollte der Threadersteller ja auch so.
Und deswegen ist es auch so langsam.
Du hättest besser Byteweise vergleichen sollen, daß hätte eh keinen großen Unterschied ergeben. Die Wahrscheinlichkeit, daß die Dateien an genau einem Byte alle unterschiedlich sind und nur ein Bitweisevergleich den Originalzustand hervorzaubern könnte, ist nämlich mehr als sehr gering.
Die Wahrscheinlichkeit ist sogar so gering, daß man in einem solchen Fall von einer völlig verkorksten Datenverbindung beim Download ausgehen müßte, womit man die 3 Dateien auch gleich gut alle gleich wegwerfen könnte.
Byteweise ist das ganze ratzfatz in einem kleinen C Programm zu realisieren.
Alle 3 Dateien als Stream öffnen und Byteweise Vergleichen.
Pseudocode:
Überprüfe ob alle Dateien gleich lang sind, denn wenn nicht, dann macht eine Mittelwertbildung keinen Sinn.
/* Wer will kann aber das Programm so ausbauen, daß es einfach dann die längste Datei hernimmt und an die Outputdatei anheftet, solange keine der beiden 2 größten Dateien bei der Byteabfrage unterschiedlich sind, denn wenn das der Fall ist, dann sind die Informationen unbrauchbar, denn die 3. Datei ist zu diesem Zeitpunkt ja schon längst zu klein und kann nicht mehr hernagezogen werden. Eine Alternative wäre 2 Outputdateien auszugeben und dann beide manuell zu testen. */
n = 0
Schleifenanfang wiederhole solange, bis Dateiende.
Nimm n-tes Byte aus Datei 1 und vergleiche n-tes Byte von Datei 2, falls gleich, behalte den Wert und kopiere es in Outputdatei und erhöhe n um ein und beginne bei Schleifenanfang.
Falls nicht gleich, vergleiche es mit n-tes Byte von Datei 3, falls gleich, behalte den Wert und kopiere es in Outputdatei und erhöhe n um ein und beginne bei Schleifenanfang.
Nimm n-tes Byte von Datei 2 und vergleiche mit n-tes byte von Datei 3, falls gleich, kopiere es in Outputdatei.
Falls nicht gleich, gib Fehler aus: "Alle 3 Dateien unterscheiden sich." und beende Programm.
Schleifenende
Pseudocode Ende
PS:
Noch viel sinnvoller als dieser Bytevergleich wäre natürlich ein Vergleich durch Ausnutzung von im Paketformat eventuell vorhandener CRC Prüfsummen, das bedarf dann aber mehr Programmlogik und ein Verständnis des Paketformats und des Prüfsummenverfahrens.
Ein einfacher Bytevergleich ist also universeller, da er das Paketformat nicht kennen muß.
Der Code ist ein wenig zusammengefrickelt (java ist in der Beziehung allerdings auch arg ungnädig),
Tja, selber Schuld, hättest du was gescheites genommen, wie z.B. C.
Danke fuer die Muehe, aber ich habe die datei jetzt auf nem anderen Rechner mit echtem DSL runtergeladen (war in etwa 2000x so schnell wie bei mir X-D) und es lief probemlos. Dennoch ist das programm sicherlich sehr nuetzlich. Wie waers wenn du es auf 3DTools packst?
Du könntest Huha's Programm aber dennoch mal mit deinen 3 alten Dateien testen (falls du sie noch hast) um zu sehen, ob es was taugt. :D
I
Der Code ist ein wenig zusammengefrickelt (java ist in der Beziehung allerdings auch arg ungnädig), aber wer sich unbedingt schockieren und ihn sehen will, der meldet sich einfach.
Wie? Du lieferst den Quellcode gar nicht erst mit?
Ich habe das Programm jetzt nicht runtergeladen, aber bei so nem Popelprogramm gibt's nichts was man Geheim halte könnte/müßte und der Sourcecode wäre allein deshalb schon wichtig, um zu sehen, ob du nicht irgendwelche bösen Schadecode ins Programm eingebaut hast.
Compilieren kann man ja dann selber wenn der Quellcode verfügbar ist.
Die 3 alten Dateien aheb ich leider nicht mehr, aber es aknn doch jeder mit nem Hexeditor ein Rar-Archiv "zerstoeren" und dann gegentesten.
Die 3 alten Dateien aheb ich leider nicht mehr, aber es aknn doch jeder mit nem Hexeditor ein Rar-Archiv "zerstoeren" und dann gegentesten.
Nun, Huha könnte dir ja ein Programm schreiben, daß die alten gelöschten Dateien wiederherstellt. :)
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.