Daten Splitten und Später wieder zusammenfügen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Daten Splitten und Später wieder zusammenfügen

Beitrag von Joel »

Diese Fragen wollte ich eigentlich schon früher stellen:

1. Wie kann ich Dateien jeweils in 1 MB Packete teilen und Später wieder zusammenfügen?

2. Wie kann ich wenn ich eine Datei von einem PC auf den anderen übertrage und die Übertragung dann unterbrochen wurde den Download von der Datei fortsetzen? (Es sollte später eine Funktionsfähige Datei herrauskommen)

Edit: Ich wäre über Codes dankbar.

Gruss, Joel
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

hjsplit :mrgreen:

Nimm erstmal eine Text-Datei.

Ich würd dir ja meinen Code geben, aber der ist schmutzig :D

Du machst folgendes:

Zur Probe:

TextDatei schreiben und jede Zeile einzeln übertragen.

Sagen wir zehn Zeilen.
Und jede Datei bekommt eine Prüfsumme.

Nun schickst du die Dateien einzeln rüber und kannst für jede wieder schauen, ob die Prüfsumme gleich ist. Die musste natürlich auch übertragen.
Und wenn ja, dann lädst du wieder alle Zeilen aus den einzelnen Dateien und machst daraus eine.

... bei Exe und DATEN-Daten ist es etwas schwieriger.

Einige Dateien haben auch das EOF-Zeichen in sich selbst, bevor sie zu Ende sind. Ich würde immer so lange auslesen, bis eine Zählvariable gleich der Länge in Byte ist. (wenn du jedes Byte einzeln liest)

Verstanden oder Fragen? :allright:

---------------------------------------------

Pfad musste dir selbst einstellen.

Code: Alles auswählen

S.s="c:\F\PureBasic\2007\text.txt"
P.s=GetPathPart(S)+"_#SPLIT\"
Size= FileSize(S)

; Alle 30 Byte Splitten

CreateDirectory(P)

If OpenFile(0,S)
For x=1 To Size/30
  Debug x
  CreateFile(1,P+RSet(Str(x),8,"0")+".txt")
  For i=1 To 30 
    WriteByte(1,ReadByte(0)) ; nicht die günstigste Methode
  Next
  CloseFile(1)
Next
CloseFile(0)
EndIf
Nun haste schon mal deine Dateien. Wie du die Prüfsummen der Dateien bestimmst ist dir überlassen.

Kannst zum Beispiel alle Byte-Werte addieren und das Ergebnis als letztes Byte der Datei anfügen.

Beim Überprüfen schauste dann, ob alle bis auf das letzte Byte addiert den Wert des letzten ergeben. (eine ganz ganz einfache Methode nur zum Verständnis)

Wenn es der Fall ist, fügst du alle bis auf das letzte Byte zusammen.

Sollte das Ergebnis nicht stimmen, musst du wieder einen Request starten und nach genau dieser Datei (dem Paket) fragen.

Achso: Textdatei, wenn du dich fragst, wieso nur 30 Byte
Zeile 1
Dings 2
Hosen runter 3
Gleich kommt die 4. Zeile
Mal schauen
Testdatei
Nichts besonderes
Nur so, etwas Text
Wo sind wir nun?
Keine Ahnung
Gut, Ende Banane
:roll:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Xaby hat geschrieben:

Code: Alles auswählen

S.s="c:\F\PureBasic\2007\text.txt"
P.s=GetPathPart(S)+"_#SPLIT"
Size= FileSize(S)

; Alle 30 Byte Splitten

CreateDirectory(P)

If OpenFile(0,S)
For x=1 To Size/30
  Debug x
  CreateFile(1,P+RSet(Str(x),8,"0")+".txt")
  For i=1 To 30 
    WriteByte(1,ReadByte(0)) ; nicht die günstigste Methode
  Next
  CloseFile(1)
Next
CloseFile(0)
EndIf
Dein Code ist schon recht gut, ich wollte aber Videodateien Splitten (Und vielleicht auch noch andere)

Ich habe mir das so vorgestellt das der Code die Videos in 2 MB Teile Splittet und es sollte halt auch bei Videos gehen.

Gruss, Joel
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Xaby hat geschrieben:Ich würd dir ja meinen Code geben, aber der ist schmutzig :D
Jaja... :roll: Was machst du nur immer für schmutzige Sachen? :lol:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Oh SRY,

Der Code Teilt auch Videos

Danke!!!!

Der 1. Teil von Frage 1 ist dann schonmal gelöst jetzt der 2. Teil!!!

Wie fügt man dass wieder zu einer Funktionierenden Datei zusammen?
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Ich hätte nicht gedacht, dass ich mal Code veröffentliche, der hier im Forum Zuspruch findet.

zu AND51
Schau mal, welcher Lieblingsthread gesperrt worden ist :cry:

Gruß, Folker :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Ist ein Guter Link aber dass Zusammenfügen klappt nochnicht: Egal was ich veränder. Es kommt immerwieder eine neue Fehlermeldung.

Code: Alles auswählen

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) 
Edit: Und wie sag ichb dem Code dass er nicht nur eine datei und die andere Zusammenfügen soll sondern allle in dem Ordner _#SPLIT und erst die mit der Zahl 1 und dann so weiter bis es keine weitere Zahl mehr gibt!!!
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Also bei mir funzt das ganze anstandslos ohne Fehler...
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Also ich hab PB 4.02 und da steht dann eine Fehlermeldung beim 2. Befehl


Edit: Da steht: "Can´t allocate a memory block of size 0!"
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Antworten