DownloadFileTaskAsync时的C#PathTooLongException

时间:2016-02-20 14:23:29

标签: c#

我正在尝试将文件下载到指定的路径,但是在调用时,我得到 PathTooLongException

public async void SaveDemo(string filename)
    {
        WebClient wc = new WebClient();

        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(downloadcompleted);
        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloadchanged);

        await wc.DownloadFileTaskAsync(Functions.GetLink(), filename);
    }

private void button1_Click(object sender, EventArgs e)
    {
        SaveFileDialog sfd = new SaveFileDialog();
        sfd.Filter = "T6MP Demo File|*.t6_dem";
        if (sfd.ShowDialog() == DialogResult.OK)
        {
            try
            {
                textBox1.Text +=  Environment.NewLine + "Downloading demo...";
                //textBox1.Text += Environment.NewLine + sfd.FileName + Environment.NewLine + sfd.FileName.Length;
                SaveDemo(sfd.FileName);
            }
            catch (Exception ex)
            {
                textBox1.Text += ex.ToString();
                throw;
            }
        }
        else
        {
            return;
        }
    }

我已尝试调试以显示通过删除注释行输入的字符串的实际legnth,结果远低于260(完全限定的文件名必须少于260个字符,并且目录名必须是少于248个字符)。为什么会发生异常?

修改

我现在甚至硬编码了一个文件名" C:\ testc.t6mp_dem",这个函数现在看起来像这样:

SaveDemo("C:\\testc.t6mp_dem");

但仍然会发生PathTooLongException,这可能是由于文件名太长造成的。那为什么这个例外仍然会发生呢?

2 个答案:

答案 0 :(得分:1)

问题永远不是文件名,而是文件名下载的地址。我修复了返回要从中下载的服务器地址的函数,现在一切正常。

答案 1 :(得分:0)

正常原因是最大路径是256个字符串。 See this some information that should help you solve the problem

  

最大路径长度限制在Windows API中(有一些   以下段落中讨论的例外情况),最大长度   对于路径是MAX_PATH,定义为260个字符。本地人   path按以下顺序构成:驱动器号,冒号,   反斜杠,名称由反斜杠分隔的组件和终止   空字符。例如,驱动器D上的最大路径是“D:\ some   256个字符的路径字符串“where”“表示不可见的   终止当前系统代码页的空字符。 (该   字符< >这里使用的是视觉清晰度,不能成为其中的一部分   一个有效的路径字符串。)