大家好我试图编写一个游戏Patcher所以我正在下载一个文件来查找我已经做了很多研究的版本我应该使用哪些代码所有不同的方法结果在同一个
WebClient downloadClient = new WebClient();
Uri url = new Uri("http://theblademasterrpg.com/Patcher/data/p.dat");
downloadClient.DownloadFile(url, Application.StartupPath + "\\p2.dat");
downloadClient.Dispose();
FileStream file = new FileStream(Application.StartupPath + "\\p2.dat", FileMode.Open, FileAccess.Read);
string fileContents;
using (StreamReader reader1 = new StreamReader(file))
{
fileContents = reader1.ReadToEnd();
}
文件似乎下载但不正确此文件只有1.0中的文本
无论我做什么甚至将其更改为html文件,它总是会显示出来我无法帮助,但认为这是网络服务器相关的东西所以我尝试apache而不是iis同样的结果
还有其他人过期了,我宁愿下载http并避免使用ftp
答案 0 :(得分:0)
该网站不会给您这么容易的文件。你需要稍微解析一下这个初始响应,你正在寻找这个字符串:
<frame src="http://71.82.23.25:8080/Patcher/data/p.dat" name="redir_frame" frameborder="0">
然后再次致电DownloadString
但现在使用src
属性中的网址:
此代码快速破解字符串IndexOf
以查找该属性。
using(WebClient downloadClient = new WebClient())
{
Uri url = new Uri("http://theblademasterrpg.com/Patcher/data/p.dat");
var html= downloadClient.DownloadString(url);
// parse to the frame src
var search = "<frame src=\"";
var pos = html.IndexOf(search);
// find the end quote
var lastQuote = html.IndexOf("\"", pos+ search.Length);
// download that src
var frameUrl = html.Substring(pos+ search.Length, lastQuote- (pos + search.Length));
var real = downloadClient.DownloadString(frameUrl);
// real has now the content of that file
real.Dump(); // LinQPad
}
请注意,网站会更改其html标记,您需要相应地调整此代码。