C# 从Mediafire直接下载链接有问题

C# 从Mediafire直接下载链接有问题,c#,download,mediafire,C#,Download,Mediafire,我从Mediafire下载文件时遇到问题。我发现我必须使用他们的API。我发现了另一个问题: 在所示函数的帮助下,我创建了以下类: class Program { static void Main(string[] args) { Mediafireclass mf = new Mediafireclass(); WebClient webClient = new WebClient(); mf.Mediafiredownload

我从Mediafire下载文件时遇到问题。我发现我必须使用他们的API。我发现了另一个问题:

在所示函数的帮助下,我创建了以下类:

class Program
{
    static void Main(string[] args)
    {
        Mediafireclass mf = new Mediafireclass();
        WebClient webClient = new WebClient();

        mf.Mediafiredownload("somemediafirelink/test.txt");
        webClient.DownloadFileAsync(new Uri("somemediafirelink/test.txt"), @"location to save/test.txt"); 
    }

}
T3KBAU5使用的函数如下:

internal class Mediafireclass
{
    public string Mediafiredownload(string download)
    {
        HttpWebRequest req;
        HttpWebResponse res;
        string str = "";
        req = (HttpWebRequest)WebRequest.Create(download);
        res = (HttpWebResponse)req.GetResponse();
        str = new StreamReader(res.GetResponseStream()).ReadToEnd();
        int indexurl = str.IndexOf("http://download");
        int indexend = GetNextIndexOf('"', str, indexurl);
        string direct = str.Substring(indexurl, indexend - indexurl);
        return direct;
    }

    private int GetNextIndexOf(char c, string source, int start)
    {
        if (start < 0 || start > source.Length - 1)
        {
            throw new ArgumentOutOfRangeException();
        }
        for (int i = start; i < source.Length; i++)
        {
            if (source[i] == c)
            {
                return i;
            }
        }
        return -1;
    }
}
内部类Mediafireclass
{
公共字符串Mediafiredownload(字符串下载)
{
HttpWebRequest-req;
HttpWebRes;
字符串str=“”;
req=(HttpWebRequest)WebRequest.Create(下载);
res=(HttpWebResponse)req.GetResponse();
str=新的StreamReader(res.GetResponseStream()).ReadToEnd();
int indexurl=str.IndexOf(“http://download");
int indexend=GetNextIndexOf(“”,str,indexurl);
string direct=str.Substring(indexurl,indexend-indexurl);
直接返回;
}
私有int GetNextIndexOf(字符c,字符串源,int开始)
{
如果(开始<0 | |开始>源.长度-1)
{
抛出新ArgumentOutOfRangeException();
}
for(int i=start;i
但当我运行它时,会弹出一个错误:


我能做些什么来解决这个问题,您能解释一下这个错误的含义吗?

首先,Mediafiredownload方法返回一个字符串,即您没有使用的直接下载链接。您的代码应该类似于:

Mediafireclass mf = new Mediafireclass();
WebClient webClient = new WebClient();

string directLink = mf.Mediafiredownload("somemediafirelink/test.txt");
webClient.DownloadFileAsync(new Uri(directLink), @"location to save/test.txt");
至于触发的异常,了解GetNextIndexOf方法正在做什么很重要——遍历字符串source,在某个起始位置start之后找到字符c的索引。该方法的第一行是检查起始值是否在源字符串的长度内,这样它就不会立即消失直接查看超出范围的字符并抛出ArgumentOutOfRangeException。您需要在此行设置断点:

int indexend = GetNextIndexOf('"', str, indexurl);
使用“局部变量”窗口查看str和indexurl的值,这将揭示问题所在


另外,您正在使用的代码已经使用了将近5年,我认为这个问题更多地是因为Mediafire将从那时起更改URL结构。您的代码依赖于URL包含“”这一事实,而这种情况可能不再如此。

最简单的方法是使用dll文件。例如

或者你必须通过“download_link”类和获取包含标记的href来查询正确的div。这就是我在这些dll中解决它的方法^^

或者使用MediaFire的API


希望我能提供帮助。

当您的代码输入GetNextIndexOf时,变量start的值是多少?我打赌它是-1,尽管在您的图片中不可见。这意味着Mediafire返回的流不包含字符串
http://download
并且可能包含一条错误消息我不知道….我使用了该函数如何关闭加载了它,我也很好奇,因为我没有找到任何开始声明…使用调试器并在调用Mediafiredownload方法中检查变量源或str的内容。注意,IndexOf的版本区分大小写。很抱歉,如果你不了解某个内容,请使用google\u translate或随时询问我,这是一个德国网站^^更新:该页面现在也有英文版本: