Entwickler-Ecke

IO, XML und Registry - Integer-Werte in Datei speichern


TomCat - Mi 25.04.12 09:58
Titel: Integer-Werte in Datei speichern
Hallo,

ich möchte ein Array aus Integer-Zahlen in eine Datei schreiben. Mit der Methode: FileStream.Write
ist es scheints nur möglich, ein Byte-array in eine Datei zu schreiben.

Gibt es da eine andere Funktion mit der Integer-Array funktionieren?
THX TomCat

Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Mi 25.04.2012 um 11:20


Th69 - Mi 25.04.12 10:21

Hallo TomCat,

möchtest du die Werte binär oder als Text (String) abspeichern?


TomCat - Mi 25.04.12 11:14

Hallo,
ich will die integerwerte einfach sequenziell binär abspeichern. Jeder Integerwert benötigt dann 4 Byte.

TomCat


Th69 - Mi 25.04.12 11:34

Dafür gibt es die Klasse BitConverter [http://msdn.microsoft.com/de-de/library/system.bitconverter.aspx], welche dir entsprechende Methoden z.B. GetBytes() bietet, um ein Byte[] zu erzeugen, den du dann mittels FileStream.Write abspichern kannst.


TomCat - Mi 16.05.12 14:07

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Dafür gibt es die Klasse BitConverter [http://msdn.microsoft.com/de-de/library/system.bitconverter.aspx], welche dir entsprechende Methoden z.B. GetBytes() bietet, um ein Byte[] zu erzeugen, den du dann mittels FileStream.Write abspichern kannst.


Aber das ist ja total umständlich und mühsam z.b. 1 mio. Integerwerte in einzelne Byte zu zerlegen nur weil die FileStream Klasse nur Byte fressen kann. Geht das nicht einfacher ? z.B. mit StreamWriter?

TomCat


ujr - Mi 16.05.12 14:22

user profile iconTomCat hat folgendes geschrieben Zum zitierten Posting springen:
z.B. mit StreamWriter?


Dazu könnte man ja mal in die Doku bei MSDN schauen. Und wenn es damit nicht geht, dann schaut man sich mal die anderen Klassen im System.IO-Namespace an. Und da gibt's dann ziemlich weit oben einen BinaryWriter. Was der wohl macht?

Eine Suche nach "C# write integer" findet bei Google auch sofort die Lösung. Ich werde wohl nie verstehen, warum Foren als Ersatz für eigenes Suchen verwendet werden.


Ralf Jansen - Mi 16.05.12 14:23

Der würde das in einen string umwandeln du willst aber eine Bytedarstellung. Aber wo siehst du den Aufwand oder die Mühsal? Wenn du das auf den Programmierer beziehst ist das ein Einzeiler. Wenn er sich Mühe gibt das schön aussehen zu lassen dann vielleicht ein 2- oder 3zeiler. Wenn du das auf den Rechner beziehst dann ist der Aufwand für den eigentlich immer gleich egal ob du explizit in Bytes umwandelst oder das hinter irgendeiner Klasse aus dem Framework versteckst. Der Unterschied ist nur das du es eventuell nicht siehst.


Palladin007 - Mi 30.05.12 17:35

Man ne andere Zwischenfrage:

Du willst ein Array speichern, wie hast du dir das vorgestellt?

Eine Zahl zu speichern ist im Prinzip einfach (schau mal hier im selben Unterforum nach, da wird erklärt, wie man Text aus einer TextBox in eine Datei schreiben kann. Wenn du da die nötigen Infos nicht raus lesen kannst, solltest du die Grundlagen lernen und nicht gleich ins Dateisystem gehen)

Da du aber ein Array hast, musst du entweder jede Zahl einzeln schreiben, oder irgendwie fest legen, wie das Array dann abgespeichert wird, oder du serialisierst es als xml und speicherst den zurück gegeben String.
Die xml-Variante ist die einfachste Möglichkeit (die ich kenne), ganze Objekte als Datei zu speichern und später wieder abzurufen.
Fündig wirst du bei Google sehr schnell, allerdings ist das, was ich benutzt habe, mit einem Beispiel Kunde gemacht.
Etwas ungünstig, aber die zwei Methoden sollten eigentlich kein Problem sein.

Wenn du weißt, was Generika sind, solltest du die auch gleich generisch machen, die Methoden, dann musst du dich um die nicht mehr kümmern und kannst sie überall nutzen.
Aber Vorsicht: XML kann nicht alles serialisieren. Dictionarys sind zum Beispiel nicht ohne weiteren, durchaus größeren Aufwand möglich.


Kha - Mi 30.05.12 19:43

Wenn du schon alte Themen ausgräbst, lies bitte etwas sorgfältiger nach:
user profile iconTomCat hat folgendes geschrieben Zum zitierten Posting springen:
ich will die integerwerte einfach sequenziell binär abspeichern. Jeder Integerwert benötigt dann 4 Byte.