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 仍然发生,这不可能是由于文件名太长引起的。那么为什么这个异常仍然会发生呢?
问题从来都不是文件名,而是下载文件名的地址。我修复了返回服务器地址以从中下载的功能,现在一切正常。
这是
正常的,因为最大路径是 256 个字符的字符串。请参阅此一些可以帮助您解决问题的信息:
Windows API 中的最大路径长度限制(带有一些 以下段落中讨论的例外情况),最大长度 因为路径是MAX_PATH,定义为 260 个字符。一个本地人 路径按以下顺序构建:驱动器号、冒号、 反斜杠、用反斜杠分隔的名称组件和终止 空字符。例如,驱动器 D 上的最大路径是"D:''some 256 个字符的路径字符串",其中 " 表示不可见 终止当前系统代码页的空字符。(的 此处使用的字符<>是为了视觉清晰度,不能成为 有效的路径字符串。