| |
VB.NET - Ein- und UmsteigerTextdatei leeren mit UFT-8 ohne BOM | | | Autor: speed2 | Datum: 20.03.14 16:44 |
| Moinsen,
ich lese eine Datei mit UTF-8 ein, replace etwas und möchte dann den neuen String in die Datei schreiben (Mit UTF-8 ohne BOM).
Zum Lesen benutze ich:
Quelltext = IO.File.ReadAllText("Datei.txt", System.Text.Encoding.UTF8) Dann replace ich...
Und dann wird in die Datei geschrieben (Ich fand zwei Methoden im Netz, welche funktionieren):
1:
Using sw As New StreamWriter("Datei.txt", True, New UTF8Encoding(True))
sw.WriteLine(Quelltext)
sw.Close()
End Using 2:
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding( _
"iso-8859-1")
Dim sw2 As New StreamWriter("Datei.txt", True, enc)
sw2.WriteLine(Quelltext)
sw2.Close() Das Problem ist:
Er überschreibt nicht die Datei sondern fügt den String einfach hintendran.
Logisch wäre es ja jetzt, wenn ich anstatt "True", "False" benutze. Doch dann ist das Problem, dass es nicht mehr funktioniert (Ich spiele die Datei woanders wieder ein und wenn es nicht genau die gleiche Codierung hat, funktioniert es nicht).
Wie kann ich also sw sagen, dass er die Datei erst leeren soll (Mit der Kodierung?).
Datei löschen und eine neue erstellen habe ich schon probiert > Funktioniert nicht (Wie gesagt, der Code funktioniert zwar, aber die Datei wird dann nicht mehr angenommen)
Gruß
speed2 | |
Re: Textdatei leeren mit UFT-8 ohne BOM | | | Autor: speed2 | Datum: 20.03.14 20:07 |
| Danke für die Antwort, hat aber leider nicht geklappt. Ich habe auch Truncate versucht:
Dim FStream As New FileStream("Datei.txt", FileMode.Create, _
FileAccess.ReadWrite)
FStream.Close() und
Dim FStream As New FileStream("Datei.txt", FileMode.Truncate)
FStream.Close() Funktioniert leider beides nicht. | |
Re: Textdatei leeren mit UFT-8 ohne BOM | | | Autor: Manfred X | Datum: 20.03.14 20:59 |
| Hallo!
Vielleich so ????
Suche auf diebisherige Weise nur die Position im File, ab der Überschrieben
werden soll.
Erstelle keine neue Datei.
Operiere danach direkt auf dem Filestream (ReadWrite).
Nutze den "binarywriter" um die geänderten Werte direkt im FileStream
einzutragen.
| |
Re: Textdatei leeren mit UFT-8 ohne BOM | | | Autor: speed2 | Datum: 20.03.14 21:15 |
| Ich möchte den kompletten Inhalt mit meinem String überschreiben.
Aber wenn ich doch den BinaryWriter benutzen möchte, dann nimmt er doch UTF-8 mit BOM? | |
Re: Textdatei leeren mit UFT-8 ohne BOM | | | Autor: Manfred X | Datum: 20.03.14 21:24 |
| Das verstehe ich nicht.
1. Wenn der komplette Inhalt ersetzt wird, kannst Du eine
neue Datei erstellen.
2. Der BinaryWriter schreibt Bytes in den FileStream.
Du kannst dabei selbst festlegen, wie die Zeichen in Bytemuster
gewandelt werden.
| |
Re: Textdatei leeren mit UFT-8 ohne BOM | | | Autor: speed2 | Datum: 21.03.14 14:10 |
| IO.File.Delete("Datei.txt")
System.IO.File.Create("Datei.txt").Dispose() Funktioniert leider nicht.
Beitrag wurde zuletzt am 21.03.14 um 14:10:25 editiert. | |
Re: Textdatei leeren mit UFT-8 ohne BOM | | | Autor: DerAndi | Datum: 21.03.14 18:33 |
| Hallo,
erhälst Du eine Fehlermeldung?
Die Datei selbst wird während deines Zugriffs aber nicht noch von dem besagten Programm mit verwendet, oder?
Normalerweise sollte der erste Ansatz funktionieren, allerdings solltest Du den Inhalt nicht mit Writeline sondern mit Write wieder in die Datei schreiben. Andernfalls erhält der Dateninhalt noch ein CR LF am Ende. Möglicherweise sorgt das dann auch für die Probleme beim weiteren verarbeiten.
Wenn ich deinen Hinweis zu Beginn des Threads aufgreife, so würde ich folgenden Code erwarten:
Using sw as new IO.StreamReader("Datei.txt", System.Text.Encoding.UTF8, False)
Quelltext = sw.ReadToEnd
End Using
Quelltext = Quelltext.Replace("X","Y")
Using sw As New StreamWriter("Datei.txt", False, Encoding.UTF8)
sw.Write(Quelltext)
sw.Close()
End Using | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|