在HTA应用程序中使用ADODB.stream的vbscript和jscript之间的奇怪行为差异

在HTA应用程序中使用ADODB.stream的vbscript和jscript之间的奇怪行为差异,vbscript,stream,ado,jscript,hta,Vbscript,Stream,Ado,Jscript,Hta,VBscript示例: Function ADO_WriteToFile(FileURL,data) Dim arrBytes SET ADObj = CreateObject("ADODB.Stream") ADObj.Open ADObj.Charset = "iso-8859-1" ADObj.Type = adTypeText ADObj.WriteText data ADObj.SaveToFile FileURL, adSaveCre

VBscript示例:

Function ADO_WriteToFile(FileURL,data)
Dim arrBytes
    SET ADObj = CreateObject("ADODB.Stream")
    ADObj.Open
    ADObj.Charset = "iso-8859-1" 
    ADObj.Type = adTypeText
    ADObj.WriteText data
    ADObj.SaveToFile FileURL, adSaveCreateOverwrite
    ADObj.Close
    ADObj.Open
    ADObj.Type = adTypeBinary
    ADObj.LoadFromFile FileURL
    ADObj.Position = 3
    arrBytes = ADObj.Read
    ADObj.Position = 0
    ADObj.SetEOS
    ADObj.Write data
    ADObj.SaveToFile FileURL, adSaveCreateOverwrite
    ADObj.Close
End Function
function writeTo(fileName,str) {
var ado =  new ActiveXObject("ADODB.Stream");
ado.Type = 2;
ado.Open();
ado.Position = 0;
ado.WriteText(str,0);
ado.SaveToFile(fileName,2);
ado.Close();
ado.Open();
ado.Type = 1;

ado.Position = 2;//line 19
var temp = ado.Read();
ado.Position = 0;
ado.SetEOS;
ado.Write(temp);
ado.SaveToFile(fileName,2);
ado.Close();
}
JScript示例:

Function ADO_WriteToFile(FileURL,data)
Dim arrBytes
    SET ADObj = CreateObject("ADODB.Stream")
    ADObj.Open
    ADObj.Charset = "iso-8859-1" 
    ADObj.Type = adTypeText
    ADObj.WriteText data
    ADObj.SaveToFile FileURL, adSaveCreateOverwrite
    ADObj.Close
    ADObj.Open
    ADObj.Type = adTypeBinary
    ADObj.LoadFromFile FileURL
    ADObj.Position = 3
    arrBytes = ADObj.Read
    ADObj.Position = 0
    ADObj.SetEOS
    ADObj.Write data
    ADObj.SaveToFile FileURL, adSaveCreateOverwrite
    ADObj.Close
End Function
function writeTo(fileName,str) {
var ado =  new ActiveXObject("ADODB.Stream");
ado.Type = 2;
ado.Open();
ado.Position = 0;
ado.WriteText(str,0);
ado.SaveToFile(fileName,2);
ado.Close();
ado.Open();
ado.Type = 1;

ado.Position = 2;//line 19
var temp = ado.Read();
ado.Position = 0;
ado.SetEOS;
ado.Write(temp);
ado.SaveToFile(fileName,2);
ado.Close();
}
为什么VBScript示例可以完美地工作,除了它不能接受有空间的文件路径之外

JScript示例出错,并显示消息“参数赋值不正确”。第19行。如果我将位置设置为0,则不会发生这种情况,但是:

ado.Position = 0;

我用它将二进制文件写入磁盘,顺便说一句,这里有一些区别:

  • 在VBScript版本中,位置设置为3;在JScript版本中,它被设置为2
  • 在VBScript版本中,定义了字符集;在JScript版本中,它是未定义的
  • 在VBScript版本中,WriteText和write都引用参数;在JScript版本中,只有WriteText引用它
参考资料