Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateien Vereinen (https://www.delphipraxis.net/105252-dateien-vereinen.html)

kevSTAR 18. Dez 2007 19:33


Dateien Vereinen
 
Hi leute,

wie kann ich mehrere dateien miteinander vereinen und auch wieder trennen? am besten so das es nicht jeder wieder auseinander nehmen kann z.B als Zip oder so mit passwort! wichtig wäre dabei das es ne leicht zu verstehende komponente OHNE Dll ist.

mfG

vlees91 18. Dez 2007 19:46

Re: Dateien Vereinen
 
http://dsdt.info/tipps/?id=133

Sollte ja leicht zu verstehen sein: Also was das teil macht: Zuerst oeffnet es Beide Dateien und kopiert bei der einen alles bis zum Ende. Dann wird in der ersten Datei ein 0-Byte angehanegt. Das Kopierte wird in die erste Datei am Ende eingefuegt und das ganze gespeichert.

Beim Splitten wird wieder alles vor dem 0-Byte in die eine gestopft und das danach in die andere.

Anmerkung: es darf kein 0-byte in einer der Beiden Dateien vorkommen.

Oops: funktioniert doch anders: die Dateigroessen werden noch reingespeichert. So kann man es nach Anzahl bytes rauskopieren beim Splitten.

ErazerZ 18. Dez 2007 19:48

Re: Dateien Vereinen
 
Komponente? Wie wäre es du machst dir eine Struktur die du benutzt, z.b.
diese Struktur schreibst am Anfang der Datei..
Delphi-Quellcode:
type TDatenInfo = packed record
  Signature: DWORD; // deine sig oder sonstiges, damit du weißt das es höhstwahrscheinlich dein Archiv format ist
  FilesCount: Integer; // anzahl der Dateien
end;
Danach schreibst du wie oft du das brauchst hintereinander auf, also wieviele Dateien du Archivieren möchtest..
Delphi-Quellcode:
type TDaten = packed record
  Filename: string[255]; // Dateiname
  Offset: DWORD; // Adresse, von wo die Datei beginnt im Archiv
  Size: DWORD; // Größe der Datei im Archiv
end;
und danach schreibst einfach die Dateien nach der Reihe im Archiv auf...

kevSTAR 18. Dez 2007 20:05

Re: Dateien Vereinen
 
ja wie? brauche genauere infos.. das mit dem Split und Join habe ich versucht das verursacht jedoch fehler bzw. ist nicht das was ich suche

Nuclear-Ping 18. Dez 2007 20:11

Re: Dateien Vereinen
 
Was für Fehler? Vlt 'n "Layer 8" Problem?

kevSTAR 18. Dez 2007 20:16

Re: Dateien Vereinen
 
Also ich habe nen timer wo ich nach und nach dateien immer wieder mit einer ausgangs ini verschmelze.. sodass alle anderen in der ini sind die dateien heissen z.B bla_0.dat bla_1.dat das mache ich halt mit ner schleife

und das split dann andersherum zuerst hole ich die 1 dann die 0.. das geht auch soweit jedoch kriege ich neuerdings nen error... manche entpackt er dann kommt ein fehler und er bricht ab habe ich z.B 5 dateien drin hat er gerade 2,3,4 rausgeholt aber 1 und 5 nicht das ist also zu instabil

gibt es keine andere möglichkeit die dateien sicher aneinander zu hängen?

Nuclear-Ping 18. Dez 2007 20:20

Re: Dateien Vereinen
 
Vlt solltest du den Timer deaktivieren, während er seinen Event ausführt?

taaktaak 18. Dez 2007 20:26

Re: Dateien Vereinen
 
Na, nicht vielleicht, sondern UNBEDINGT den Timer disablen!!!!

kevSTAR 18. Dez 2007 20:29

Re: Dateien Vereinen
 
naja der schlägt aber nur alle 20 sekunden zu :)

taaktaak 18. Dez 2007 20:32

Re: Dateien Vereinen
 
Kommando zurück.... na, dann.... aber aus Prinzip würd' ich's trotzdem tun ... :dance:

kevSTAR 18. Dez 2007 20:36

Re: Dateien Vereinen
 
habe ich getan.. also das packen scheint gut zu laufen ohne probleme.. das entpacken macht jedoch probleme er splittet die dateien an falschen stellen wieder auf so hat z.B dat_5 200 statt 50kb und so

taaktaak 18. Dez 2007 20:41

Re: Dateien Vereinen
 
Hmm, ich denke, du solltest schrittweise vorgehen. Bevor du nicht absolut sicher bist, dass das Packen KORREKT funktioniert hat, solltest du nicht das "Entpack-Problem" versuchen zu lösen. Schau dir die gepackte Datei z.B. mit 'nem Hex-Editor an und prüfe, ob das wirklich korrekt gelaufen ist.

kevSTAR 18. Dez 2007 20:45

Re: Dateien Vereinen
 
also ich mache das so.. ich nehme als hauptdatei eine ini wo ich nach jedem schritt die anzahl der files rein schreibe und diese beim splitten auch wieder auslese.. aber seit neuesten kriege ich da fehler

taaktaak 18. Dez 2007 20:53

Re: Dateien Vereinen
 
Das versteh ich jetzt irgendwie nicht: Du musst doch die jeweile StartAdresse und die Länge der Datei wissen, schreibst du das nicht in die "INI"? Oder sind die Dateien alle gleich lang???????

kevSTAR 18. Dez 2007 21:00

Re: Dateien Vereinen
 
nein ich schreibe nur die anzahl der dateien in die ini..
die funktion macht das anhand des datei namens automatisch mit der länge wie ich das mitbekomme habe!

taaktaak 18. Dez 2007 21:07

Re: Dateien Vereinen
 
Uhhh, wer lesen kann ist echt im Vorteil :stupid:

- steht ja im zweiten Beitrag: #00 ist der Trenner! Dann hast du die eigentlichen Prozeduren also nicht selbst geschrieben. Bleibt für mich die Frage: Ist sichergestellt, dass in deinen Dateien nie #00 enthalten ist??? Ich halte diese Lösung für problematisch! Ich würd's nicht so machen wollen...

Nix für ungut, aber ich mach' für heute Schluss :hi:
Gute Nacht

vlees91 18. Dez 2007 21:16

Re: Dateien Vereinen
 
Wenns ini Dateien sind ists ja kein Problm, oder haben die neuerdings auch regelmaessig ein 0-Byte drin

kevSTAR 18. Dez 2007 21:21

Re: Dateien Vereinen
 
es sind alles jpeg's die einzelnen dateien!

taaktaak 18. Dez 2007 21:22

Re: Dateien Vereinen
 
...und da sind massenhaft #00's drin ...............

kevSTAR 18. Dez 2007 21:24

Re: Dateien Vereinen
 
Hmm wie könnte ich es sonst gut lösen?

taaktaak 18. Dez 2007 21:31

Re: Dateien Vereinen
 
Mit dem Trenner geht's m.E. nicht - du musst (wie schon beschrieben, Offset und Länge der einzelnen Dateien merken) und diese Information beim extrahieren verwenden. Also beide Prozeduren selber schreiben...

kevSTAR 18. Dez 2007 21:33

Re: Dateien Vereinen
 
Hmm ich wüsste jetzt nicht wie das gehen soll :( gibts da nix fertiges oder so?

vlees91 18. Dez 2007 21:37

Re: Dateien Vereinen
 
ich glaube das Michael Puff sowas mal gemacht hat

kevSTAR 18. Dez 2007 21:44

Re: Dateien Vereinen
 
und was bringt mir das jetzt? :D

Nuclear-Ping 18. Dez 2007 21:50

Re: Dateien Vereinen
 
Du willst eine Datei splitten?
  • Dateigröße ermitteln (FileOpen, FileSeek)
  • Anzahl der Teile = Ceil(Dateigröße / Splitgröße)
  • Schleife von 0 bis Teile - 1 (for ...)
    • Speicher reservieren (Array of Byte (SetLength) oder PChar / Pointer (GetMem))
    • Puffer auslesen (FileRead)
    • Splitdatei öffnen (FileCreate, Dateiname zB 'Split.' + inttostr (Schleifenzähler))
    • Puffer schreiben (FileWrite)
    • Splitdatei schließen (FileClose)
    • Speicher freigeben (FreeMem)
  • Datei schließen

Beim zusammenfügen zB einfach alle Dateien in einem Verzeichnis in eine Liste holen, angefangen von Split.000 bis Split.N - sozusagen bis es keine mehr gibt, und die mit den Funktionen von oben wieder zusammenfügen.

Was ist denn das Problem? Wenn dir die nötigen Grundlagen im Umgang mit der Delphi-Hilfe, Datentypen und Funktionen fehlen, dann lies doch ein Buch oder Tutorial? Man muss doch aus so'ner trivialen Sache nicht schonwieder 'nen 3-Seiten-Thread machen? :gruebel:

kevSTAR 18. Dez 2007 22:00

Re: Dateien Vereinen
 
ich will keine datei Splitten, bitte nochmal richtig lesen!

Ich möchte ca. 10 dateien mit einander verpacken das es eine wird und diese auch später wieder auseinander nehmen!

kevSTAR 18. Dez 2007 22:17

Re: Dateien Vereinen
 
Also ich möchte es so machen:

als hauptfile wird eine ini genommen in der die anzahl der an der ini angehängten dateien steht (1-50 dateien ca.)
nur weiss ich nicht wie ich die dateien am besten an einander hänge und auch komfortabel wieder auseinander setzen kann.. die Split/join funktion von dsdt ist nicht das wahre da sie fehler macht beim splitten von jpeg's

Nuclear-Ping 18. Dez 2007 23:04

Re: Dateien Vereinen
 
:wiejetzt:

Zitat:

Zitat von kevSTAR
ich will keine datei Splitten, bitte nochmal richtig lesen!

Zitat:

Zitat von kevSTAR
... nur weiss ich nicht wie ich die dateien am besten an einander hänge und auch komfortabel wieder auseinander setzen kann ...

Zitat:

Zitat von kevSTAR
als hauptfile wird eine ini genommen in der die anzahl der an der ini angehängten dateien steht

Ist dir überhaupt klar, was Ini-Dateien für einen Sinn haben? Es sind Text-Dateien, in der in der Regel Konfigurationseinstellungen gespeichert werden. Dafür gibt es die T...IniFile-Objekte.

Wenn du ein Archiv hast und Dateien daraus extrahieren willst, dann gehst du das Ganze ziemlich umständlich an.
Vorallem wie kommen die Dateien darein? Hast du das gemacht?
Überdenke doch nochmal dein Konzept, das geht doch hinten und vorn nicht auf? :gruebel:

Mach dich mal über Datentypen und den Umgang mit Dateien schlau. Du kannst Dateigrößen und die Anzahl der Dateien in der Datei als Integer-Werte "binär" speichern und lesen (FileRead, FileWrite), in Dateien hin- und herspringen (FileSeek), Puffer mit bestimmten Größen auslesen, etc.
Statt Dateien mit Handles zu verarbeiten (wie bei den FileOpen, FileRead, ... Funktionen) kannst du auch TFileStream nehmen.

kevSTAR 18. Dez 2007 23:13

Re: Dateien Vereinen
 
nein ich habe bisher noch nichts archiviert oder so ich suche immernoch eine methode dies zu tun..

ja dann zeig mir mal bitte tutorials dazu wie man die daten binär speichert also die anzahl der dateien deren größe etc.

Nuclear-Ping 19. Dez 2007 08:12

Re: Dateien Vereinen
 
Sorry, aber was hindert dich - ausser Trägheit - daran, Google oder einschlägige Tutorial-Seiten mal zu besuchen? Dass ihr euch immer alles in den A**** schieben lassen wollt ... :roll:

--> http://dsdt.info/tutorials/?cat=11

Luckie 19. Dez 2007 09:12

Re: Dateien Vereinen
 
Siehe dazu meinen SFX-Builder: http://www.delphipraxis.net/internal...307&highlight=

kevSTAR 19. Dez 2007 12:07

Re: Dateien Vereinen
 
was bringt mir ein SFX builder? ich habs nun ganz anders geschafft mit einer wie ich finde sehr guten methode ohne componenten/klassen.

kann hier also zu :) btw. in google habe ich stundenlang nix gefunden seiten wie dsdt sind einfach schlecht.

Luckie 19. Dez 2007 16:13

Re: Dateien Vereinen
 
Dann rat mal, was ein SFX-Packer macht, nämlich genau das, was du willst.

Nuclear-Ping 19. Dez 2007 16:40

Re: Dateien Vereinen
 
Zitat:

Zitat von kevSTAR
... btw. in google habe ich stundenlang nix gefunden seiten wie dsdt sind einfach schlecht.

Klassisches "Layer 8"-Problem.

http://dsdt.info/tutorials/streams/ ist einfach schlecht? Für mich sieht das - im Ansatz - genau so aus, wie das was du willst. :gruebel:

Asö, btw: Bei Google suchenDelphi Datei Tutorial Zweiter Haupttreffer, erster Unterpunkt. Da bin ich auf die dsdt-Seite gekommen.

taaktaak 19. Dez 2007 16:46

Re: Dateien Vereinen
 
Nur mal so am Rande (möchte gern mitschmunzeln): Was ist ein "Layer 8"-Problem??? :shock:

Luckie 19. Dez 2007 16:48

Re: Dateien Vereinen
 
BTW. und wie hast du es jetzt geschaft?

Nuclear-Ping 19. Dez 2007 16:49

Re: Dateien Vereinen
 
http://de.wikipedia.org/wiki/OSI-Modell

taaktaak 19. Dez 2007 17:03

Re: Dateien Vereinen
 
AHAAAAAAAAA, da dort nur von 7 Layern gesprochen wird, ist der Layer 8 also entweder der Anwender oder der Programmierer - und dort liegt hier das Problem - richtig verstanden?

Nuclear-Ping 19. Dez 2007 17:20

Re: Dateien Vereinen
 
Exakt. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz