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
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
Felix U. schrieb: > --> My.Computer.FileSystem.WriteAllBytes habe ich auch schon getestet, ist genau das selbe.
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?
> 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
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
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).
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.