Wie Dateien richtig splitten (gelöst)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Wie Dateien richtig splitten (gelöst)

Beitrag von PBZecke »

Hallo!

Ich habe mit dem unteren code versucht Dateien zu splitten und wieder
zusammen zu setzen. Grundsätzlich funktioniert das auch mit Bildern, exe
usw. Nur Zip-Archive und manche Installer machen Probleme aller "Archiv
defekt". Das wird wohl daran liegen, dass die Checksumme der wieder
hergestellten Datei geprüft wird und nicht mehr stimmt!

Was muss ich beachten, damit die Checksumme der wieder hergestellten
Datei mit der Originaldatei übereinstimmt?

Code: Alles auswählen


DefaultPacketSize = 50000
SourceFile$       = "C:\irgendwas.datei"
DestinationFile$  = "C:\irgendwas neu.datei"



;Zerstückeln ======================================================

OpenFile(0, SourceFile$)
  
  Size        = Lof(0)
  PacketCount = Size / DefaultPacketSize        ;Paketanzahl ermitteln
  PacketSize  = Size / PacketCount              ;genaue Paketgröße ermitteln
  RestSize    = Size - PacketSize * PacketCount ;den Rest der Datei in einem zus. Paket anlegen

  *mem = AllocateMemory(PacketSize)
  
  For i = 1 To PacketCount
    ReadData(0, *mem, PacketSize)
    OpenFile(i,"c:\Pack" + Str(i) + ".pck")
       WriteData(i,*mem, PacketSize)
    CloseFile(i)
  Next
  
  If restsize > 0
     OpenFile(PacketCount+1,"c:\Pack" + Str(PacketCount+1) + ".pck")
        WriteData(PacketCount+1,*mem, Restsize)
     CloseFile(PacketCount+1)  
  EndIf
  
  FreeMemory(*mem)   
    
CloseFile(0)






;Zusammensetzen ===================================================

OpenFile(0, DestinationFile$)
   
  *mem = AllocateMemory(PacketSize)

   For i = 1 To PacketCount
      OpenFile(i,"c:\Pack" + Str(i) + ".pck") 
         ReadData(i, *mem, PacketSize)
      CloseFile(i)
      WriteData(0,*mem,PacketSize)
   Next
   
   If restsize > 0
      OpenFile(PacketCount+1,"c:\Pack" + Str(PacketCount+1) + ".pck") 
         ReadData(PacketCount+1, *mem, PacketSize)
      CloseFile(PacketCount+1)
      WriteData(0,*mem,Restsize)      
   EndIf
   
  FreeMemory(*mem)    

CloseFile(0)

Zuletzt geändert von PBZecke am 14.08.2006 22:09, insgesamt 1-mal geändert.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Bei downloads von zips ist dies auch meist ein problem.

Kopierst du auch den Anhang?
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Du solltest ReadFile bzw CreateFile benutzen an deinem Prob arbeite ich noch;) MD5 hash mäßig sind deine Files komplett richtig.
Habe nen Bug gefunden. Wenn die Daten kleiner als ein Cluster sind dividiert er mit 0.
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Konne hat geschrieben:Du solltest ReadFile bzw CreateFile benutzen an deinem Prob arbeite ich noch;) MD5 hash mäßig sind deine Files komplett richtig.
Habe nen Bug gefunden. Wenn die Daten kleiner als ein Cluster sind dividiert er mit 0.
Also mit checksum und hash habe ich mich noch nicht richtig beschäfttigt, wie hast Du das denn geprüft?

Das mit dem Bug ist schon OK, ist noch im Versuchsstadium, trotzdem Danke
für den Hinweis!
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Also mit Winrar und windows erstellten zip Files gehts prima.

Code: Alles auswählen

Debug MD5FileFingerprint(SourceFile$)
Debug MD5FileFingerprint(DestinationFile$)
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Komisch! Genau ein mit Windows Zip erstelltes File macht zicken! Ist aber
auch groß, 80 MB.

Das andere ist ein NSIS-Installer. Der meckert auch.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Komisch vielleicht ist mein windows anders.
Nunja auf jedenfall passt das schon wenn du das nur so machst da wird keiner Meckern.
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Na ja, im Moment spiele ich ja nur damit rum, aber ich wollte das in meine
dll-Sammlung aufnehmen, und da sollte das schon zu 100% funktionieren.

Vieleicht fällt jemanden noch was dazu ein. Auf jeden Fall danke Konne! :)
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Wie Dateien richtig splitten (gelöst)

Beitrag von PBZecke »

Habe den Fehler gefunden! Ich habe dummerweise einfach ein ReadData()
beim splitten vergessen! Dadurch wurden ans Ende der wieder
zusammengesetzten Datei zwei mal die gleichen Daten geschrieben.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Antworten