【问题标题】:How do I fix System.Net.WebException: 'The filename, directory name, or volume label syntax is incorrect如何修复 System.Net.WebException:'文件名、目录名或卷标语法不正确
【发布时间】:2019-11-20 04:39:30
【问题描述】:

我正在尝试为程序创建引导程序,并且错误“System.Net.WebException:'文件名、目录名或卷标语法不正确”不断弹出。

我一直卡在这个问题上,一直在猜测如何解决这个问题。

String pname = "Fredysploit_v2";
String dlink = "https://pastebin.com/V5NcE09n";
string title = @"Title ";
Console.Title = pname + " Bootstrapper";

Console.ForegroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(title);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Downloading new Files...");
WebClient wc = new WebClient();
string key = wc.DownloadString(dlink);
string path = @"Update\" + pname + ".exe";
System.Net.WebClient Dow = new WebClient();
string patch = (@"Update");
Directory.CreateDirectory(patch);
//My problem ↓
Dow.DownloadFile(key, path);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(pname + " Downloaded | Updated!");
Console.WriteLine($"Now open " + patch + " and Run " + pname + ".exe");
Console.ReadKey();

我希望结果是从作为 pastebin 链接的文本中下载文件,但实际结果是“System.Net.WebException:'文件名、目录名或卷标语法不正确”。

【问题讨论】:

  • 你调试过代码吗? key 的值是多少?
  • 我已经调试过了,key的值为wc.DownloadString(dlink);
  • 用Dow.DownloadFile(dlink, path)代替Dow.DownloadFile(key, path)
  • 我得到了文件,但它已损坏或无法读取。我的理论是它下载了文本并没有从 pastebin 上的链接下载
  • 不,key的值不是wc.DownloadString(dlink); - 这是该方法调用的结果。您是否查看过调试器中的实际值?

标签: c# system.net.webexception


【解决方案1】:

问题是您获取的 HTML 表单 pastebin 的整个页面不是您要查找的 URL。正如@Jon Skeet 在 cmets 中提到的,尝试使用 https://pastebin.com/raw/V5NcE09n 作为 dlink ,所以它显示如下:

String dlink = "https://pastebin.com/raw/V5NcE09n";

更新后的代码解决方案如下:

String pname = "Fredysploit_v2";
String dlink = "https://pastebin.com/raw/V5NcE09n";
string title = @"Title ";
Console.Title = pname + " Bootstrapper";

Console.ForegroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(title);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Downloading new Files...");
WebClient wc = new WebClient();
string key = wc.DownloadString(dlink);
string path = @"Update\" + pname + ".exe";
System.Net.WebClient Dow = new WebClient();
string patch = (@"Update");
Directory.CreateDirectory(patch);

Dow.DownloadFile(key, path);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(pname + " Downloaded | Updated!");
Console.WriteLine($"Now open " + patch + " and Run " + pname + ".exe");
Console.ReadKey();

【讨论】:

  • 还有一个问题...i.imgur.com/BXmxLSZ.png
  • @Dread415 是Dow.DownloadFile(key, path); 的异常吗?我在那条线上有有效的值。当我运行它时,我得到key = https://cdn.discordapp.com/attachments/414163402328375296/598508978095259649/Fredysploit_v2.exe 和path = Update\Fredysploit_v2.exe。添加Console.WriteLine 以打印出每个值并查看您当时拥有的值
  • 好的,我做了 Console.Writeline(key);我得到了页面的 html 代码
  • nvm 我确实改了
  • @Dread415 我想是的,你正在下载整个 HTML 页面,但如果你将 /raw/ 添加到 URL,pastebin 只会给你 URL
【解决方案2】:

我认为正在发生的事情是您尝试将整个网站作为文件下载,而不是下载在您的 pastebin 内容 (proof here) 中链接的文件。

也许有一种获取链接的方法,例如:解析网站的 html 并从特定的 html 标签读取内容,或者,如果存在,使用 pastebin api(我现在会检查那个。@987654322 @. 也许看看这个)


由于 api 对您的帮助不大,这里有一些代码可以从网站解析 HTML: WebClient client = new WebClient(); String htmlCode = client.DownloadString("@987654323@");

这允许您获取粘贴中的字符串。


这将是您对代码的最后更改,应该可以解决您的问题

    String pname = "Fredysploit_v2";
    String dlink = "https://pastebin.com/raw/dnfHuGAK"; 
    //^ changed the download link to the raw paste so you can extract your link
    string title = @"Title ";
    Console.Title = pname + " Bootstrapper";

    Console.ForegroundColor = ConsoleColor.Blue;
    Console.ForegroundColor = ConsoleColor.Cyan;
    Console.WriteLine(title);
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("Downloading new Files...");
    WebClient wc = new WebClient();
    string key = wc.DownloadString(dlink);
    string path = @"Update\" + pname + ".exe";
    System.Net.WebClient Dow = new WebClient();
    string patch = (@"Update");
    Directory.CreateDirectory(patch);
    Dow.DownloadFile(key, path);
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine(pname + " Downloaded | Updated!");
    Console.WriteLine($"Now open { patch } and Run { pname }.exe");
    //^ since you are using String.Format(), make use of it :)
    Console.ReadKey();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-06-30
  • 2019-05-24
  • 2019-09-30
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多