Seite 1 von 1

Binäre Datei einlesen + als Datei abspeichern = immer 0 Byte

Verfasst: 09.07.2006 18:34
von Delle
Hallo,

weiß jemand warum hier immer eine 0-Byte-Datei erzeugt wird?

In den Speicher wird alles korrekt eingelesen, das Erstellen der Datei funktioniert auch, allerdings werden keine Daten reingeschrieben .-(

Code: Alles auswählen

If ReadFile(0,"1.exe") 

length=Lof()
*MemoryID=AllocateMemory(length)
bytes=ReadData(*MemoryID,length)
CloseFile(0)

EndIf
						        
If CreateFile(0,"2.exe")

WriteData(PeekS(*MemoryID),length)
CloseFile(0)  

EndIf

Verfasst: 09.07.2006 18:36
von DarkDragon

Code: Alles auswählen

If ReadFile(0,"1.exe")

length=Lof()
*MemoryID=AllocateMemory(length)
bytes=ReadData(*MemoryID,length)
CloseFile(0)

EndIf
                         
If CreateFile(0,"2.exe")

WriteData(*MemoryID,length)
CloseFile(0) 

EndIf
So vielleicht? Ohne PeekS, denn als Rückgabe bekommst du einen String und der endet mit einem 0-Byte.

Verfasst: 09.07.2006 19:41
von ts-soft
Wie Daniel bereits sagte, wollte nur hinzufügen, das jeder Allocierte Speicher zu prüfen ist !!!!
Ansonsten Invalid Memory Access

If *MemorID
; bla blub
endif

Nach Gebrauch freigeben halte ich für Sinnvoll, ist aber nicht unbedingt
erforderlich.

Verfasst: 10.07.2006 17:33
von DarkDragon
ts-soft hat geschrieben:Wie Daniel bereits sagte, wollte nur hinzufügen, das jeder Allocierte Speicher zu prüfen ist !!!!
Ansonsten Invalid Memory Access

If *MemorID
; bla blub
endif
Stimmt, aber wenn PeekS schon klappt, dann dürfte dort eigentlich nicht der Fehler liegen. Es gehört sich aber das zu prüfen.

Verfasst: 10.07.2006 23:03
von Falko
Sowas ähnliches hatte ich Jens schon mal gepostet :twisted:

PB4: Binary write & read

@TS
Auch ich habe auf Memory jetzt nicht geprüft, was aber jeder selbst ändern kann, wenn er es für nötig hält 8)

Grüße Falko

Verfasst: 10.07.2006 23:15
von ts-soft
Falko hat geschrieben: @TS
Auch ich habe auf Memory jetzt nicht geprüft, was aber jeder selbst ändern kann, wenn er es für nötig hält 8)

Grüße Falko

Code: Alles auswählen

If *Buffer
Und was ist das :mrgreen:

Hat es nen besonderen Grund, das die Routine alles Byteweise macht, weil so
wie es da genutzt wird, wäre ReadData und WriteData ein vielfaches
schneller mit demselben Ergebnis.

Verfasst: 10.07.2006 23:21
von Falko
ts-soft hat geschrieben:
Falko hat geschrieben: @TS
Auch ich habe auf Memory jetzt nicht geprüft, was aber jeder selbst ändern kann, wenn er es für nötig hält 8)

Grüße Falko

Code: Alles auswählen

If *Buffer
Und was ist das :mrgreen:

Hat es nen besonderen Grund, das die Routine alles Byteweise macht, weil so
wie es da genutzt wird, wäre ReadData und WriteData ein vielfaches
schneller mit demselben Ergebnis.
Ich wusste, das du darauf antworten würdest.
>>If *Buffer ; habs auch nach langer Zeit nicht wieder angesehen :mrgreen:


Sicher ist das Andere schneller. Vielleicht will man ja auch einzelne Bytes (Buchstaben, Zahlen) ändern. Dann ist es auch im Speicher praktisch.
Ist ja auch nur ein weiterer Tip. An einem Wettbewerb will ich mich absolut nicht beteiligen :twisted:

Grüße Falko