2016-03-19 15 views
2

Hier ein Code-Snippet zu generieren:wie von Byte-Array lesen zum Herunterladen einer Binärdatei mit VBScript Binärdatei

... 
Dim fs,ts 
varByteArray = http.ResponseBody 
Set fs = CreateObject("Scripting.FileSystemObject") 
Set ts = fs.CreateTextFile("filetowrite", True) 
For lngCounter = 0 to UBound(varByteArray) 
    ts.Write Chr(255 And Ascb(Midb(varByteArrary, lngCounter + 1, 1))) 
Next 
ts.Close 

über (vollständige Code kann here zu finden)

Ich frage mich:

Chr(255 And Ascb(... 
  1. Aus meinem einem besseren Verständnis Chr 2 Bytes erzeugt UTF-8, nicht ein (012.311.). Aber wäre das nicht notwendig für eine korrekte Byteausgabe für eine neu erzeugte Binärdatei?
  2. Warum maskieren Sie 255 unter Verwendung eines And-Operators mit der Nummer eines 1-Byte-ANSI-Zeichens. Welchen Zweck hat das?
+0

Wie VBScript Strings intern darstellt und was in Dateien geschrieben wird, sind zwei verschiedene Dinge. –

+0

Mm, so scheint es wegen Midb-> Ascb, dass es keine speziellen Unicode-Darstellungen geben konnte. Daher wäre das Zeichen nach Chr intern immer 0-255 | 0. Dann wird das Zeichen als ein Byte ascii zum Textstream-Schreiben gegeben. Also ist der Schreibvorgang dann wieder korrekt. –

+0

Eine Menge davon erscheint mir sinnlos, wer die ADO-Bibliothek in diesen Tagen nicht auf einer Windows-Maschine haben wird? – Lankymart

Antwort

0
  1. Dieser Code wird nicht mit "Option Explicit" so Variablendeklarationen sind nutzlos. Es verwendet nicht deklarierte Variablen. Zwei deklarierte und initialisierte Variablen werden nicht verwendet.

  2. Die "binary und" mit 255 scheint

ich keinen Zweck, einen Test zu dienen Datei 4 MB mit 4 verschiedenen Methoden heruntergeladen

  1. Verwenden von Chrome, der normale Weg

  2. Verwenden Sie die ADO-Methode im Skript. Ist sehr schnell und ist Byte-identisch zur Browser-Version (Hex-Vergleich)

  3. Verwendung der AscB-Methode mit "binary und with 255". Es ist sehr, sehr, sehr langsam aber ist Byte-identisch mit Browser-Version (Hex-Vergleich)

  4. Verwenden Sie die AscB-Methode ohne "Binär-und mit 255". Es ist sehr, sehr langsam (aber ein wenig schneller als 5), ist aber Byte-identisch mit Browser-Version (Hex Vergleich)

Bottom Line: Dieser Code funktioniert. Versucht mehrere Methoden in der Reihenfolge ihrer Präferenz zu verbinden, versucht zwei Methoden in der Reihenfolge der Präferenz herunterzuladen (es versucht zuerst ADO und fällt nur auf die AscB-Methode zurück, wenn ADO fehlschlägt). Ich mag diesen Code.

+0

Ich würde nicht sehen * "Deklarationen sind nutzlos" * wenn 'Option Explicit' nicht verwendet wird, sollten Sie idealerweise' Option Explicit' verwenden, aber Sie sollten immer Ihre Variablen deklarieren. Das letzte, was Sie wollen, sind Variablen außerhalb des Funktionsumfangs und vieles mehr. Außerdem ist es viel einfacher, zu "Option Explicit" zu wechseln. – Lankymart