现写的代码在下载完之后,碰到有些服务器下载来的文件会是乱码,查了一下,用命令行bin模式下载,不会改变其原来编码,不会造成这种现象。 我想象CMD命令里那样,连接成功之后,下个命令bin.就转换成这个binmary模式了,这个api里有没有这样的。
我原来用的是这几个实现下载的。这里可以改进实现我上述的功能吗?
internetOpen
InternetConnect
FtpGetFile
 
Private Const FTP_TRANSFER_TYPE_UNKNOWN = &H0
Private Const FTP_TRANSFER_TYPE_ASCII = &H1
Private Const FTP_TRANSFER_TYPE_BINARY = &H2
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Const FILE_ATTRIBUTE_NORMAL = &H80InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
InternetConnect(mFTPOpen, mAddress, mPoint, mUser, mPassWord, 1, 0, 0)  连接
 FtpGetFile(mFTPConn, RomeFileName, LocalPath, False, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY Or INTERNET_FLAG_RELOAD, 0) 下载
 

解决方案 »

  1.   

    仅供参考:VERSION 5.00
    Object = "{48E59290-9880-11CF-9754-00AA00C00908}#1.0#0"; "MSINET.OCX"
    Begin VB.Form Form1
       BorderStyle     =   1  'Fixed Single
       ClientHeight    =   3060
       ClientLeft      =   45
       ClientTop       =   330
       ClientWidth     =   4035
       LinkTopic       =   "Form1"
       MaxButton       =   0   'False
       MinButton       =   0   'False
       ScaleHeight     =   3060
       ScaleWidth      =   4035
       StartUpPosition =   3  '窗口缺省
       Begin VB.CommandButton Command1
          Caption         =   "下载"
          Height          =   495
          Left            =   1440
          TabIndex        =   0
          Top             =   1320
          Width           =   1215
       End
       Begin InetCtlsObjects.Inet Inet1
          Left            =   -15
          Top             =   -15
          _ExtentX        =   1005
          _ExtentY        =   1005
          _Version        =   393216
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option Explicit
    Dim ExeStr As String
    Dim Done As Boolean
    Private Sub cmd(cmdstr As String)
        Do
            If Inet1.StillExecuting = False Then Exit Do
        Loop
        ExeStr = cmdstr
        Done = False
        Debug.Print ExeStr; "="
        Inet1.Execute , ExeStr
        Do
            DoEvents
            If Done Then Exit Do
        Loop
    End Sub
    Public Sub ReadNewFile(File As String)
        Inet1.URL = "ftp://123.123.123.123"
        Inet1.UserName = "username"
        Inet1.Password = "password"    'cmd "PWD"
        'cmd "CD ../files"
        'cmd "DIR"
        'cmd "GET " + File + App.Path + "\" + File    cmd "GET ../files/" + File + App.Path + "\" + File    cmd "QUIT"
    End SubPrivate Sub Command1_Click()
        Command1.Enabled = False
        ReadNewFile ("aFile.ext")
        Command1.Enabled = True
    End SubPrivate Sub Inet1_StateChanged(ByVal State As Integer)
    Dim intFile As Integer
    Dim vtData() As Byte
    Dim str As String
    'On Error GoTo ISCerr
        Debug.Print "State="; State,
        Select Case State
        Case 0
            Debug.Print "icNone"
        Case 1
            Debug.Print "icHostResolvingHost"
        Case 2
            Debug.Print "icHostResolved"
        Case 3
            Debug.Print "icConnecting"
        Case 4
            Debug.Print "icConnected"
        Case 5
            Debug.Print "icRequesting"
        Case 6
            Debug.Print "icRequestSent"
        Case 7
            Debug.Print "icReceivingResponse"
        Case 8
            Debug.Print "icResponseReceived"
            If Left(ExeStr, 2) = "CD" Then Done = True
        Case 9
            Debug.Print "icDisconnecting"
        Case 10
            Debug.Print "icDisconnected"
            Done = True
        Case 11
            Debug.Print "icError of [" + ExeStr + "]="; Inet1.ResponseInfo
            Done = True
        Case 12
            Debug.Print "icResponseCompleted----------------"
            Do
                str = Inet1.GetChunk(1024, icString)
                If LenB(str) = 0 Then Exit Do
                Debug.Print str
            Loop
            Done = True
        End Select
        Exit Sub
    ISCerr:
        Resume Next
    End Sub