Zdravím, Přecházím do Visual Basicu 2008 Professional Edition SP1. Potřebuji přepisovat posloupnost několika znaků, od zvoleného místa v existujícím souboru. v .NET CompactFramework 1.0, 2.0 Celková velikost souboru zůstává stejná. Třída BinaryWriter se zdá být nepoužitelná, překvapivě při zápisu vkládá jeden znak navíc (01 hexa) (viz níže) Dělám snad něco špatně? Nebo jak jinak na to? Please help! :-) Takto jsem dopadl s BinaryWriter ================================== původní obsah souboru: "12345" hexadecimálně: (31 32 33 34 35) když se snažím přepsat číslo "3", písmenem "C" s pomocí BinaryWriter dopadne to takto Obsah souboru: "12C5" hexadecimálně: (31 32 01 43 35) Pro úplnost, potřebuji aby to bylo Obsah souboru: "12C45" :-) ========================== také jsem zkoušel využít FileStream je to sice už funkční ale mám pocit že to půjde ještě elegantněji viz více dole Zde je úplný kod s BinaryWriter
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim fileName As String = "D:\ ...\Soubor.txt"
Dim textByteChr As String = "C"
Dim binWriter As New BinaryWriter( _
File.Open(fileName, FileMode.Open, FileAccess.Write), _
System.Text.Encoding.GetEncoding(1250))
binWriter.Seek(2, SeekOrigin.Begin)
binWriter.Write(textByteChr)
binWriter.Close()
End Sub
End Class
více úspěšnější jsem byl takto ale ..,
Dim textByteChr As String = "67" '"C"=43hex, "C"=67dec
Dim fileStream As FileStream = _
New FileStream(fileName, FileMode.Open)
fileStream.Seek(2, SeekOrigin.Begin)
fileStream.WriteByte(CByte(textByteChr))
fileStream.Close()
ale připadá mi to neefektivní převádět řetězec na ASCII hodnoty a také jsem nenašel jak nastavit typ znakové sady. Předpokládám, že to jde i jinak a efektivněji. Díky moc za jakékoliv náměty.
|