Guten Abend Community
Ich hab ein Problem zum Filestream.
Ich besitze eine String mit lauter asiatschen Zeichen wie "晚上好社區". Dieser String kann bis zu 2000000 Zeichen lang sein. Damit das ein bisschen zügig vor sich geht, möchte ich über folgende Variante vorgehen. (siehe Code)
Leider entspricht der Inhalt der Datei nicht meinem String. Ist es irgendwie möglich die erstellte Datei nicht unter ANSI sondern Unicode abzuspeichern, und wie müsste ich ms.Read(bytText, 0, blockSize)) umändern damit ich in der Datei auch die gleichen "Zeichen" vorfinde? Ich habe es bis jetzt einfach nicht hingekriegt. Vielleicht Streamwriter?
Danke für die Hilfe.
Freundliche Grüsse
exc-jdbi
[highlight=vbnet]
Option Strict On
Option Explicit On
Imports System.IO
Module Module1
Sub Main()
Dim txt As String = "晚上好社區"
Dim filename As String = IO.Path.GetTempFileName
If ToolsVaribles.WriteInFileUnicode(txt, filename) Then
Stop
End If
End Sub
End Module
Public Class ToolsVaribles
Public Shared Function WriteInFileUnicode(ByVal txt As String, ByVal fileName As String) As Boolean
Dim numBytes As Integer = 0
Dim bytText As Byte() = Nothing
Const blockSize As Integer = 1024
Dim ue As System.Text.UnicodeEncoding = Nothing
WriteInFileUnicode = False
Dim intL As Integer = txt.Length
Try
ue = New System.Text.UnicodeEncoding
If File.Exists(fileName) Then
File.Delete(fileName)
Using ms As New MemoryStream
Using bw As New BinaryWriter(ms, ue)
bw.Write(txt)
ms.Flush() : ms.Position = 0
If ms.Length > 0 Then
bytText = New Byte(blockSize - 1) {}
Using fs As FileStream = File.OpenWrite(fileName)
ms.Flush() : ms.Position = 0
While (CheckValue(numBytes, ms.Read(bytText, 0, blockSize))) > 0
fs.Write(bytText, 0, numBytes)
End While
fs.Flush()
WriteInFileUnicode = True
End Using
End If
End Using
End Using
End If
Catch ex As Exception
End Try
End Function
Private Shared Function CheckValue(Of T)(ByRef target As T, value As T) As T
target = value
Return value
End Function
End Class
[/highlight]
Ich hab ein Problem zum Filestream.
Ich besitze eine String mit lauter asiatschen Zeichen wie "晚上好社區". Dieser String kann bis zu 2000000 Zeichen lang sein. Damit das ein bisschen zügig vor sich geht, möchte ich über folgende Variante vorgehen. (siehe Code)
Leider entspricht der Inhalt der Datei nicht meinem String. Ist es irgendwie möglich die erstellte Datei nicht unter ANSI sondern Unicode abzuspeichern, und wie müsste ich ms.Read(bytText, 0, blockSize)) umändern damit ich in der Datei auch die gleichen "Zeichen" vorfinde? Ich habe es bis jetzt einfach nicht hingekriegt. Vielleicht Streamwriter?
Danke für die Hilfe.
Freundliche Grüsse
exc-jdbi
[highlight=vbnet]
Option Strict On
Option Explicit On
Imports System.IO
Module Module1
Sub Main()
Dim txt As String = "晚上好社區"
Dim filename As String = IO.Path.GetTempFileName
If ToolsVaribles.WriteInFileUnicode(txt, filename) Then
Stop
End If
End Sub
End Module
Public Class ToolsVaribles
Public Shared Function WriteInFileUnicode(ByVal txt As String, ByVal fileName As String) As Boolean
Dim numBytes As Integer = 0
Dim bytText As Byte() = Nothing
Const blockSize As Integer = 1024
Dim ue As System.Text.UnicodeEncoding = Nothing
WriteInFileUnicode = False
Dim intL As Integer = txt.Length
Try
ue = New System.Text.UnicodeEncoding
If File.Exists(fileName) Then
File.Delete(fileName)
Using ms As New MemoryStream
Using bw As New BinaryWriter(ms, ue)
bw.Write(txt)
ms.Flush() : ms.Position = 0
If ms.Length > 0 Then
bytText = New Byte(blockSize - 1) {}
Using fs As FileStream = File.OpenWrite(fileName)
ms.Flush() : ms.Position = 0
While (CheckValue(numBytes, ms.Read(bytText, 0, blockSize))) > 0
fs.Write(bytText, 0, numBytes)
End While
fs.Flush()
WriteInFileUnicode = True
End Using
End If
End Using
End Using
End If
Catch ex As Exception
End Try
End Function
Private Shared Function CheckValue(Of T)(ByRef target As T, value As T) As T
target = value
Return value
End Function
End Class
[/highlight]
Comment