文件不下载,即使它说它做了

时间:2016-06-21 22:51:21

标签: c# winforms datagridview webclient

我遇到一个文件无法下载的问题,即使它显示为已完成。

该文件未显示在应该下载到的位置。

这是我的代码:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if(e.ColumnIndex == 2)
    {
        int rowIndex = e.RowIndex;
        DataGridViewRow row = dataGridView1.Rows[rowIndex];
        string value1 = row.Cells[2].Value.ToString();
        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(AtlasCompleted);
        Uri fileUrl = new Uri(value1);
        Beta = fileUrl;
        //Console.WriteLine(FormPopup.Variables.Location1.Length);
        if (FormPopup.Variables.Location1 != null && FormPopup.Variables.Location1.Length >= 5)
        {
            Console.WriteLine(FormPopup.Variables.Location1);
            Console.WriteLine(fileUrl);
            wc.DownloadFileAsync(fileUrl, FormPopup.Variables.Location1);
            //MessageBox.Show(fileUrl.ToString() + "               " + FormPopup.Variables.Location1);
        }
        else
        {
            MessageBox.Show("Error: No file location specified.");
            FormPopup form = new FormPopup();
            form.Show(this);
        }

    }
}

private void AtlasCompleted(object sender, AsyncCompletedEventArgs e)
{
    MessageBox.Show(Beta.ToString() + "               " + FormPopup.Variables.Location1);
}

该文件应该下载,但不会下载或出现在指定的位置。

如果有人能提供帮助那就太棒了,那真让我感到困惑。

感谢您的回复:D

1 个答案:

答案 0 :(得分:0)

WebClient代码很好,它应该没有任何问题下载文件。只需确保您的文件Uri正确(将uri粘贴到浏览器中并查看其正确)。在本地系统上保存文件的路径应该是有效的(路径中包含的文件夹必须存在),并且常规用户必须具有写入权限。

要进一步测试,请先使用硬编码值:

wc.DownloadFileAsync("File Uril","File path at local system");

示例:

wc.DownloadFileAsync(new Uri("http://example.com/myfile.txt"), @"d:\myfile.txt");

仔细检查Uri和位置的变量,因为除了无效参数之外没有任何魔法会阻止下载。

此外,添加一些错误记录/异常处理,以便它告诉您发生了什么。

private void AtlasCompleted(object sender, AsyncCompletedEventArgs e)
{
if(e.Error !=null)
    Console.WriteLine(e.Error.Message);
     else
   Console.WriteLine("Completed");

    MessageBox.Show(Beta.ToString() + "               " + FormPopup.Variables.Location1);
}