C# PathTooLongException when DownloadFileTaskAsync

本文关键字:DownloadFileTaskAsync when PathTooLongException | 更新日期: 2023-09-27 18:35:32

我正在尝试将文件下载到指定的路径,但是当调用时,我得到了一个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;
        }
    }

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

编辑

我现在甚至将文件名"C:''testc.t6mp_dem"硬编码到函数中,所以它现在看起来像这样:

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

但 PathTooLongException 仍然发生,这不可能是由于文件名太长引起的。那么为什么这个异常仍然会发生呢?

C# PathTooLongException when DownloadFileTaskAsync

问题从来都不是文件名,而是下载文件名的地址。我修复了返回服务器地址以从中下载的功能,现在一切正常。

这是

正常的,因为最大路径是 256 个字符的字符串。请参阅此一些可以帮助您解决问题的信息:

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

相关文章:
  • 没有找到相关文章