Seite 1 von 1
Datei Verstecken
Verfasst: 07.05.2013 20:09
von Tsuki-Namida
Hallo,
ich möchte eine Datei in einer anderen "verstecken" bzw. direckt dahinter setzen.
Ich habe diesen consolen Befehl für Windows gefunden:
copy /b meinbild.jpg + geheim.rar neuesbild.jpg
Ich Möchte diesen Befehl aber für Linux (Ubuntu) und für Windows in ein Tool haben...
Ich hoffe das mir jemand helfen kann...
[Edit]
Ach ja... Ich habe PureBasic 5.11
Re: Datei Verstecken
Verfasst: 07.05.2013 20:16
von RSBasic
Lad die Datei mit ReadData() in den Speicher und öffne anschließend die andere Datei, die du vergrößern möchtest. Ermittle die Größe mit Lof() und setze den Dateicursor mit FileSeek(). Dann nur noch mit WriteData() deine geladene Datei anhängen. Fertig.
Re: Datei Verstecken
Verfasst: 07.05.2013 21:07
von NicTheQuick
Oder beide Quelldateien öffnen und nacheinander in die Zieldatei schreiben ohne Puffer. Denn PB hat ja schon seinen eigenen Puffer.
Code: Alles auswählen
Procedure TwoFilesIntoOne(srcFile1.s, srcFile2.s, destFile.s)
Protected hSrcFile1.i, hSrcFile2.i, hDestFile.i, byte.b
hSrcFile1 = ReadFile(#PB_Any, srcFile1) ; Öffne erste Datei
If (Not hSrcFile1)
ProcedureReturn #False
EndIf
hSrcFile2 = ReadFile(#PB_Any, srcFile2) ; Öffne zweite Datei
If (Not hSrcFile2)
CloseFile(hSrcFile1)
ProcedureReturn #False
EndIf
hDestFile = CreateFile(#PB_Any, destFile) ; Öffne Zieldatei zum Schreiben
If (Not hDestFile)
CloseFile(hSrcFile1)
CloseFile(hSrcFile2)
ProcedureReturn #False
EndIf
While Not Eof(hSrcFile1) ; Schreibe Byte für Byte der ersten Datei in die Zieldatei
byte = ReadByte(hSrcFile1)
WriteByte(hDestFile, byte)
Wend
While Not Eof(hSrcFile2) ; Schreibe Byte für Byte der zweiten Datei in die Zieldatei
byte = ReadByte(hSrcFile2)
WriteByte(hDestFile, byte)
Wend
; Schließe alle Dateien
CloseFile(hSrcFile1)
CloseFile(hSrcFile2)
CloseFile(hDestFile)
ProcedureReturn #True
EndProcedure
Debug TwoFilesIntoOne("/home/nicolas/tmp/bla1.txt", "/home/nicolas/tmp/bla1.txt", "/home/nicolas/tmp/blubb.txt")
Re: Datei Verstecken
Verfasst: 08.05.2013 17:09
von Tsuki-Namida
Super! das ist Klasse
Danke
Re: Datei Verstecken
Verfasst: 08.05.2013 23:54
von c4s
RSBasic hat geschrieben:Lad die Datei mit ReadData() in den Speicher und öffne anschließend die andere Datei, die du vergrößern möchtest. Ermittle die Größe mit Lof() und setze den Dateicursor mit FileSeek(). Dann nur noch mit WriteData() deine geladene Datei anhängen. Fertig.
...mit PB5.10 lässt sich das sogar noch etwas abkürzen, Stichwort:
#PB_File_Append.

Re: Datei Verstecken
Verfasst: 09.05.2013 11:26
von RSBasic
Ah, habs nicht gewusst, danke.

Re: Datei Verstecken
Verfasst: 09.05.2013 14:08
von NicTheQuick
Ich bin davon ausgegangen, dass eine neue Datei daraus werden soll, wie er es in seinem ersten Post im Beispiel hatte.
Re: Datei Verstecken
Verfasst: 09.05.2013 20:31
von Falko
Das spart natürlich viel Code und lässt sich auch
schön für ein Consoleprogramm umschreiben
Code: Alles auswählen
file1.s = OpenFileRequester("Datei zum erweitern auswählen...","","Text (.txt)|*.txt|All files (*.*)|*.*",0)
If file1
file2.s = OpenFileRequester("Anzuhängende Datei auswählen...","","Text (.txt)|*.txt|All files (*.*)|*.*",0)
If file2
If ReadFile(0, file2)
length = Lof(0)
*MemoryID = AllocateMemory(length)
If *MemoryID
bytes = ReadData(0, *MemoryID, length)
Antwort.l=MessageRequester("Hinweis","Soll die Originaldatei überschrieben werden?",#PB_MessageRequester_YesNo )
If Antwort=#PB_MessageRequester_No
file3.s = SaveFileRequester("Bitte geben sie einen neuen Dateinamen an...","","Text (.txt)|*.txt|All files (*.*)|*.*",0)
CopyFile(file1,file3)
file1=file3
EndIf
If OpenFile(1,file1,#PB_File_Append)
WriteData(1,*MemoryID,length)
CloseFile(1)
Else
MessageRequester("Fehler","Datei2 nicht vorhanden")
EndIf
EndIf
CloseFile(0)
EndIf
EndIf
Else
MessageRequester("Fehler","Datei1 nicht vorhanden")
EndIf
@RSBasic ich weiß
Beim copy /B File1.txt + File2.txt + File... werden die einzelnen Dateien zu File1.txt binär kopiert.
So wie NTQ es geschrieben hat, kann man den Copy /B auch dazu nutzen um eine neue Datei zu
erzeugen, wie z.B. eine PRN-Datei für den Drucker.
Das sähe dann so aus: copy /B File1.txt + File2.txt + File3.BMP Ausdruck.PRN