可恢复文件下载器C#到VB.NET

时间:2012-10-30 11:42:29

标签: c# vb.net type-conversion download-manager

我正在尝试转换我在其他网站上找到的C#脚本:http://www.codeproject.com/Tips/307548/Resume-Suppoert-Downloading

到目前为止,我已经成功转换了大部分内容,但是一旦我运行该程序,它就会创建一个只有0字节的文件。当在C#中运行时,它完美地工作,所以我知道它对我的转换技能(或者在这种情况下缺乏)有问题。

这是C#

        static void DownloadFile(string sSourceURL, string sDestinationPath)
    {
        long iFileSize = 0;
        int iBufferSize = 1024;
        iBufferSize *= 1000;
        long iExistLen = 0;
        System.IO.FileStream saveFileStream;
        if (System.IO.File.Exists(sDestinationPath))
        {
            System.IO.FileInfo fINfo =
               new System.IO.FileInfo(sDestinationPath);
            iExistLen = fINfo.Length;
        }

        if (iExistLen > 0)
            saveFileStream = new System.IO.FileStream(sDestinationPath,
              System.IO.FileMode.Append, System.IO.FileAccess.Write,
              System.IO.FileShare.ReadWrite);
        else
            saveFileStream = new System.IO.FileStream(sDestinationPath,
              System.IO.FileMode.Create, System.IO.FileAccess.Write,
              System.IO.FileShare.ReadWrite);

        System.Net.HttpWebRequest hwRq;
        System.Net.HttpWebResponse hwRes;
        hwRq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(sSourceURL);
        hwRq.AddRange((int)iExistLen);
        System.IO.Stream smRespStream;
        hwRes = (System.Net.HttpWebResponse)hwRq.GetResponse();
        smRespStream = hwRes.GetResponseStream();

        iFileSize = hwRes.ContentLength;

        int iByteSize;
        byte[] downBuffer = new byte[iBufferSize];

        while ((iByteSize = smRespStream.Read(downBuffer, 0, downBuffer.Length)) > 0)
        {
            saveFileStream.Write(downBuffer, 0, iByteSize);
        }
    } 

现在我的VB.NET

        Dim sSourceURL As String = TextBox1.Text
    Dim sDestinationPath As String = TextBox2.Text

    Dim iFileSize As Long = 0
    Dim iBufferSize As Integer = 1024
    iBufferSize *= 1000
    Dim iExistLen As Long = 0
    Dim saveFileStream As System.IO.FileStream

    If System.IO.File.Exists(sDestinationPath) Then
        Dim fINfo As New System.IO.FileInfo(sDestinationPath)
        iExistLen = fINfo.Length
    End If

    If iExistLen > 0 Then
        saveFileStream = New System.IO.FileStream(sDestinationPath, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite)
    Else
        saveFileStream = New System.IO.FileStream(sDestinationPath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite)
    End If

    Dim hwRq As System.Net.HttpWebRequest
    Dim hwRes As System.Net.HttpWebResponse
    hwRq = DirectCast(System.Net.HttpWebRequest.Create(sSourceURL), System.Net.HttpWebRequest)
    hwRq.AddRange(CInt(iExistLen))
    Dim smRespStream As System.IO.Stream
    hwRes = DirectCast(hwRq.GetResponse(), System.Net.HttpWebResponse)
    smRespStream = hwRes.GetResponseStream()

    iFileSize = hwRes.ContentLength

    Dim iByteSize As Integer
    Dim downBuffer As Byte() = New Byte(iBufferSize) {}

    While ((smRespStream.Read(downBuffer, 0, downBuffer.Length))) > 0
        saveFileStream.Write(downBuffer, 0, iByteSize)
    End While

我相信我遇到的问题出现在这段代码中:

    While ((smRespStream.Read(downBuffer, 0, downBuffer.Length))) > 0
        saveFileStream.Write(downBuffer, 0, iByteSize)
    End While

感谢您的所有时间:)

1 个答案:

答案 0 :(得分:0)

我认为您错过了对iByteSize的分配,这被检查为大于0。

这样的事情:

While (iByteSize = (smRespStream.Read(downBuffer, 0, downBuffer.Length))) > 0
   saveFileStream.Write(downBuffer, 0, iByteSize)
End While

编辑:也许这样的东西,但我没有在本地进行过测试!

iByteSize = (smRespStream.Read(downBuffer, 0, downBuffer.Length))
While (iByteSize > 0)
   saveFileStream.Write(downBuffer, 0, iByteSize)
   iByteSize = (smRespStream.Read(downBuffer, 0, downBuffer.Length))
End While