Forum: PC-Programmierung Datei Schreiben mit Visual Studio 2015


von Steffen W. (woern92)


Lesenswert?

Guten abend,

ich habe ein problem mit dem schreiben einer Datei mit Visual Basic in 
Visual Studio 2015.

Und zwar das Folgende:

Ich habe einen String: "Temp"

msgbox str((len(Temp)))

gibt mit die Info "307000"... ist auch richtig soweit, das sind Daten 
die ich vorher per UART empfangen habe.

Wenn ich jetzt aber:

My.Computer.FileSystem.WriteAllText("C:\Projekt\test.bin", Temp, False)

Dann hat die datei 340487 Bytes. Aber warum ist meine Datei größer als 
der String den ich habe?

In den Daten ist alles Mögliche dabei, von 0 - 255 DEZ...

Hat jemand eine Idee wo das Problem liegt? Wenn ich zum Beispiel einen 
String in die Datei schreibe der kleiner ist z.B. 500Bytes dann geht 
alles gut.

MFG

von Felix U. (ubfx)


Lesenswert?

Was mir mal in C (das ja auch nur die WinAPI wrappt) passiert ist, ist 
dass Zeilenumbrüche \n zu \r\n konvertiert wurden, wenn man sich nicht 
im binary mode befand. Das hat mich einige Stunden gekostet. Kann gut 
sein, dass das hier auch der Fall ist. Generell würde ich bei der großen 
Abweichung aber darauf tippen, dass der bestimmte chars in Unicode 
Zeichen umwandelt. Generell solltest du für Binärdaten keine 
Textfunktion benutzen.

--> My.Computer.FileSystem.WriteAllBytes

: Bearbeitet durch User
von Steffen W. (woern92)


Lesenswert?

Felix U. schrieb:
> --> My.Computer.FileSystem.WriteAllBytes

habe ich auch schon getestet, ist genau das selbe.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Steffen W. schrieb:
> Aber warum ist meine Datei größer als der String den ich habe?

Könnte es sein, daß Deine Funktion an eine bestehende Datei anhängt?

Hast Du schon mal den Inhalt der Datei betrachtet?

von fpga (Gast)


Lesenswert?

> Aber warum ist meine Datei größer als der String den ich habe?

Wo her beziehst du diese Erkenntnis? Die Windows Dateigröße ist dank 
Dateisystem immer größer...

Gruß J

von Felix U. (ubfx)


Lesenswert?

Steffen W. schrieb:
> Felix U. schrieb:
>> --> My.Computer.FileSystem.WriteAllBytes
>
> habe ich auch schon getestet, ist genau das selbe.

Wie bringst du denn die Werte in den String rein? len() wertet ein 
Unicode Zeichen als "1 Zeichen", geschrieben werden aber 2. Du musst 
also absolut sichergehen dass dein String nur UTF-8 ist, du darfst ihn 
also auch nicht von einem Char-Array erzeugen. Ich würde mal versuchen, 
gar keine Strings sondern nur Byte Arrays zu verwenden.

fpga schrieb:
> Wo her beziehst du diese Erkenntnis? Die Windows Dateigröße ist dank
> Dateisystem immer größer...

Im Eigenschaften Dialog wird die echte Größe und die Größe auf 
Datenträger angezeigt.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

fpga schrieb:
> Die Windows Dateigröße ist dank Dateisystem immer größer...

Nö. Eine Datei ist exakt so groß wie ihr Inhalt.

Du verwechelst das mit der "Größe auf dem Datenträger", die aber zeigt 
Windows erst auf Nachfrage an (z.B. im "Eigenschaften"-Dialog).

von Rolf M. (rmagnus)


Lesenswert?

Steffen W. schrieb:
> Aber warum ist meine Datei größer als der String den ich habe?

Ist das wirklich Text, den du da hast? Binärdaten gehören nicht in einen 
String.

von Steffen W. (woern92)


Lesenswert?

Rufus Τ. F. schrieb:
> Könnte es sein, daß Deine Funktion an eine bestehende Datei anhängt?
>
> Hast Du schon mal den Inhalt der Datei betrachtet?

Nein, die Datei wird vorher gelöscht.


Rolf M. schrieb:
> Ist das wirklich Text, den du da hast? Binärdaten gehören nicht in einen
> String.

Nein es sind Binär daten, aber String war für mich das einfachste.
Ich teste es bei Gelegenheit mal mit einem Byte Array.

Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.