我正在尝试将文件下载到指定的路径,但是在调用时,我得到 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,这可能是由于文件名太长造成的。那为什么这个例外仍然会发生呢?
答案 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”“表示不可见的 终止当前系统代码页的空字符。 (该 字符< >这里使用的是视觉清晰度,不能成为其中的一部分 一个有效的路径字符串。)