![]() |
Re: Beste Speicherart ?
Jens hat schon ein Beispiel gegeben, aber hier ein Einfaches zum verstehen:
Delphi-Quellcode:
Das ist nur ein einfaches Beispiel, wenn beispielsweise eine Variable Länge des Namens, müsste beispielsweise ein Header geschrieben werden. Ich habe das ohne Delphi geschrieben, da ich es nicht installiert habe, deshalb könnte ein Fehler drinn sein.
procedure WriteSave(SavePath, PlayerName: String; LevelStatus: Byte; Money: Integer);
var Stream: TFileStream; begin Stream:= TFileStream.Create(SavePath, fmCreate); Stream.WriteBuffer(PlayerName, SizeOf(PlayerName)); Stream.WriteBuffer(LevelStatus, 1)); Stream.WriteBuffer(Money, 4)); Stream.Free; end; |
Re: Beste Speicherart ?
Ich kann dir nur
![]() Schnuper mal rein! |
Re: Beste Speicherart ?
Hallo,
dann darf natürlich auch die ![]() |
Re: Beste Speicherart ?
Machs wie ich mit einer einfachen Blowfish verschlüsselung (128). Das geht Blitzschnell und ist sicher. Den Public Key bauste einfach in die exe ein. Wenn du willst helfe ich dir dabei!
Meld dich einfach! mfg MiniKeks, Nieberle Software Solutions Admin |
Re: Beste Speicherart ?
Für kurze Strings würd ich mit der Registry arbeiten. Wobei du da aufpassen musst, dass du alles in HKEY_Current_User schreibst, weil du sonst nicht ohne Adminrechte drauf zugreifen kannst ;)
|
Re: Beste Speicherart ?
Zitat:
|
Re: Beste Speicherart ?
Zitat:
Ich glaub bei Delphi-Source.de gibt es en Quellcode um dateien zu verschlüsseln |
Re: Beste Speicherart ?
es geht so:
Delphi-Quellcode:
Also: wenn man 5 buchstaben liest oder schreibt(.Write/.Read) dann spults in der datei automatisch 5 buchstaben weiter, man braucht nicht immer mit .Seek rumspulen.
FS{tfilestream} := TFileStream.Create(FileName{string, name unter welchem die datei geschbeichert werden soll}, fmCreate);
//Text(string) speichern Buffer{string} := "text"; FS.Write(Buffer[1], SizeOf(Buffer)); //Zahl(integer) speichern //Tipp: ein integer verbraucht 4 bytes speicherplatz, wird also auf diese weise mit lediglich 4 byte speicherverbrauch gespeichert und ist mit notepad&co nicht darstellbar, schon das sürfte solche total-noobs abschrecken ;) BufferI{Integer} := 123; FS.Write(BufferI, SizeOf(Integer)); //text der variabel lang ist kann z.b. so gespeichert werde: Buffer := "Hallo. Dies ist ein Text, er kann beliebig lang sein."; {er kann natürlich net beliebig lang sein, nur 4 gigabyte groß!! ansonsten muss unten statt Integer Int64 verwendet werden, dann braucht das ganze ding mehr speicherplatz! und delphi hat glaubich auch ne maximallänge für strings oder?} BufferSize{Integer, wenn Buffer>4gb dann Int64} := Length(Buffer); FS.Write(BufferSize, SizeOf(Integer{/Int64})); FS.Write(Buffer[1], BufferSize); //hier werden also zuerst in 4 bytes die länge des strings gespeichert und dann kann er spöäter nach bedarf ausgelesen werden. //Diese methode braucht keinen Terminator und ich finds besser weil man _alle_ buchstaben speichern kann und nicht einen escapestring oder so hat. //datei schließen FS.Free; ////datei lesen FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); {buffer: struing} {buffersize: integer} //in der datei "rumspulen" - geht auch beim schreiben;) FS.Seek(0, soFromBeginning); //an anfang der datei FS.Seek(0, soFromEnd); //ans ende der datei FS.Seek(8, soFromCurrent); //8 buchstaben weiter FS.Seek(-3, soFromEnd); //3 buchstaben vorm ende FS.Seek(-12, soFromCurrent); //12 buchsteben zurück //string lesen SetLength(Buffer, 5{wie lang ist der string?}); FS.Read(Buffer[1], 5{wie lang ist der string?}); //integer lesen FS.Read(BufferI, SizeOf(Integer)); //lies die konstrkution von vorher wieder aus, also zuerst 4 bytes längenindikator, dann den string selber FS.Read(BufferSize{<-so lang ist der string}, SizeOf(Integer)); SetLength(Buffer, BufferSize); //buffer mit #0's füllen FS.Read(Buffer[1], BufferSize); //buffer auslesen //wenn man vorher In64 genommen hat muss man hier natürlich auch Int64 einsetzen! fs.free; //wenn man z.b. inner datei unbekannt viele integers speichert kann mans ja so machen alle auszulesen: while FS.Position < FS.Size do FS.Read(BufferI, SizeOf(Integer)); //mach was mit bufferI end; Tipp: dauerndes rumspulen mahcts programm langsam!! Tipp2: nemht den TMemoryStream statt den Filestream(ist genau gleich, nur dass kein dateiname angegeben werden muss)->bedienung genau gleich aber alles wird statt inner datei nur im RAM gespeichert. Es gibt ja auch noch den TZipStream(oder so ähnlich) der speichert alles glaub wie der memory stream im ram bloß er verpackts gleich mit ZIP ;) -Dominik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz