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. 8)

Re: Datei Verstecken

Verfasst: 09.05.2013 11:26
von RSBasic
Ah, habs nicht gewusst, danke. :allright:

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