Hallo,
ich habe ein Problem mit der ReadAll-Funktion des TextStream-Objekts.
Eigentlich möchte ich einfach nur eine beliebige Datei öffnen und in eine Variable einlesen. In VBS funktioniert das offenbar nur über dieses TextStream-Objekt, was ja auch okay ist.
Das Problem: Wenn diese ReadAll-Funktion in der einzulesenden Datei auf eine NULL stößt, also das ASCII-Zeichen mit dem Code 0 (vbNullString), dann fängt das Teil an zu spinnen. Fortan werden nämlich nur noch NULLen eingelesen. Das beste ist aber, dass sich die Funktion irgendwann wieder erholt und von da an den normalen Inhalt weiter einliest.
Am Ende habe ich also in der Variable den Inhalt der Datei, allerdings mitten drin einen Bereich von NULLen, der bei der ersten NULL beginnt und unterschiedlich lang sein kann.
Lese ich die Datei hingegen mit der Read-Funktion Zeichen für Zeichen ein, geht es problemlos. Read(n) mit n>1 habe ich nicht probiert.
Ich dachte, dass ich das gestern gelöst hätte, indem ich auf TristateFalse umgestiegen bin als Parameter, aber entweder habe ich mich da getäuscht, oder heute ist es schon wieder vorbei.
Das folgende Skript demonstriert das Problem ganz gut. Hat jemand eine Idee, woran das liegen kann bzw. wie man es besser machen kann? Das Schreiben mit Write funktioniert übrigens offenbar einwandfrei. Dabei gibt es dieses Problem nicht.
Danke,
Kristian
PS: Ich lasse das Formatieren mit PRE weg, damit das Copy/Paste funktioniert.
Option Explicit
'-------------------------------------------------------------------------------
’ Kristian Zarse für WerWeissWas-Frage am 11.Oktober 2005
'-------------------------------------------------------------------------------
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const TristateFalse = 0
'-------------------------------------------------------------------------------
Call ReadFile
'-------------------------------------------------------------------------------
Sub ReadFile()
Dim arrParams
Dim i
Dim fso
Dim f
Dim ts
Dim strFileName
Dim strFileContent1
Dim strFileContent2
Dim s
Set arrParams = WScript.Arguments
If arrParams.Count
