Datei Verstecken

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Datei Verstecken

Beitrag 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
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Datei Verstecken

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Datei Verstecken

Beitrag 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")
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Re: Datei Verstecken

Beitrag von Tsuki-Namida »

Super! das ist Klasse

Danke
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Datei Verstecken

Beitrag 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)
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Datei Verstecken

Beitrag von RSBasic »

Ah, habs nicht gewusst, danke. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Datei Verstecken

Beitrag von NicTheQuick »

Ich bin davon ausgegangen, dass eine neue Datei daraus werden soll, wie er es in seinem ersten Post im Beispiel hatte.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Datei Verstecken

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten