vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Textdatei 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textdatei leeren mit UFT-8 ohne BOM 
Autor: ErfinderDesRades
Datum: 20.03.14 17:19

Zitat:

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).
Das klingt mir, als gebe es da ein Programm, dass sich nicht so ohne weiteres hacken oder gar cracken lässt.

Also wenn der Hersteller da wirklich Vorkehrungen getroffen hat, dann kann das sehr sehr schwierig werden, weil angenommen werden darf, der Hersteller ist Profi.

(Rechtschreibfehler urheberrechtlich geschützt)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textdatei leeren mit UFT-8 ohne BOM 
Autor: effeff
Datum: 20.03.14 17:38

Siehe http://www.vbarchiv.net/workshop/workshop_73-arbeiten-mit-dateien-und-ordnern-in-net-teil-1.html...

Da steht drin, wie man eine Datei überschreibt...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel