【问题标题】:Download Empty File with VBScript使用 VBScript 下载空文件
【发布时间】:2014-07-01 14:20:47
【问题描述】:

当我尝试使用此脚本下载空文件时,我收到错误消息: 参数类型错误、超出可接受范围或相互冲突。我该如何解决?

这是我的脚本

    Set objHTTP = CreateObject("WinHTTP.WinHttpRequest.5.1")
    objHTTP.Open "GET", "http://localhost/file.txt", False
    objHTTP.Send

    Dim objStream
    Set objStream = CreateObject("ADODB.Stream")
    With objStream
        .Type = 1
        .Open
        .Write objHTTP.ResponseBody
        .SaveToFile "C:\file.txt"
        .Close
    End With
    Set objStream = Nothing

我只对空文件有这个问题。

【问题讨论】:

  • “obj.HHTTP.Open”应该是“objHTTP.Open”
  • 你在哪一行得到错误?
  • 请退后一步,描述您要解决的实际问题,而不是您认为的解决方案。你想通过下载一个空文件来完成什么?是否要检查该特定文件是否存在?还有什么?
  • 是的,这是拼写错误,我没有复制粘贴,因为这段代码在另一个网络中)所以我的问题是,我需要下载所有文件,包括空文件,但是这段代码不适用于空文件。

标签: vbscript adodb winhttprequest


【解决方案1】:

对于空文件,.ResponseBody 是子类型 Empty 的变体。这样的野兽是写不出来的。由于您无法在 VBScript 中创建空的 Byte(),因此您必须跳过 .Write 以获取空文件。在代码中:

Const adSaveCreateNotExist  = 1 ' Default. Creates a new file if the file does not already exist
Const adSaveCreateOverWrite = 2 ' Overwrites the file with the data from the currently open Stream
                                ' object, if the file already exists

Set objHTTP = CreateObject("WinHTTP.WinHttpRequest.5.1")
objHTTP.Open "GET", "http://gent/empty.html", False

objHttp.Send
WScript.Echo objHttp.Status, objHttp.StatusText

Dim objStream
Set objStream = CreateObject("ADODB.Stream")
With objStream
    .Type = 1
    .Open
    WScript.Echo TypeName(objHTTP.ResponseBody)
    If Not IsEmpty(objHTTP.ResponseBody) Then .Write objHTTP.ResponseBody
    .SaveToFile "file.txt", adSaveCreateOverWrite
    .Close
End With
Set objStream = Nothing

输出:

cscript 24512602.vbs
200 OK
Empty
...
dir
...
01.07.2014  16:54               771 24512602.vbs
01.07.2014  16:54                 0 file.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多