C# 从互联网下载文件?

C# 从互联网下载文件?,c#,downloadfile,C#,Downloadfile,我对下面的代码块感到困惑,因为为什么它下载网页的内容而不是文件本身。我创建了一个包含一些文本的虚拟文件,然后我下载了它,但是当我打开下载文件时,我没有看到我写的任何文本,但是它有奇怪的web语言标签 private bool DownloadCSVfile() { bool downloadOk = false; WebClient client = null; try { client =

我对下面的代码块感到困惑,因为为什么它下载网页的内容而不是文件本身。我创建了一个包含一些文本的虚拟文件,然后我下载了它,但是当我打开下载文件时,我没有看到我写的任何文本,但是它有奇怪的web语言标签

    private bool DownloadCSVfile()
    {
        bool downloadOk = false;
        WebClient client = null;

        try
        {
            client = new WebClient();
            client.Credentials = CredentialCache.DefaultCredentials;
            client.DownloadFile(myURL, CSVfile);

            if (File.Exists(CSVfile))
                downloadOk = true;
            else
                downloadOk = false;
        }
        catch (Exception error)
        {
            downloadOk = false;
            string err = error.Message;
        }

        //release resource
        if (client != null)
        {
            client.Dispose();
            client = null;
        }

        //
        if (downloadOk == true)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
我猜我的URL以/而不是.csv结尾,对吗?您是否认为myURL+CSVFile将包含文件的完整路径?不会的。URL必须是文件本身的路径。您可以拥有以下内容:

client.DownloadFile(@"./file.csv", "filename.txt");

如果我的思路不对,请告诉我URL中有什么,以及下载文件中的前几个标记中有哪些。

该站点是否需要登录,并且它确实在重定向您


我以前也有过这样的经历,要求我在下载所需文件之前伪造浏览动作和存储cookies等。对不起,网页在网页内容中的含义是什么。这里只涉及一个URL,那就是myURL。myURL是否直接指向CSV文件?如果是这样,那么您接收的内容实际上是什么样子的

此外:

…太尴尬了。请写:

downloadOk = File.Exists(CSVfile);
这有相同的结果,在1行而不是4行

//
if (downloadOk == true)
{
    return true;
}
else
{
    return false;
}
这更糟糕。单行线:

return downloadOk;
…在1行代码而不是7行代码中执行完全相同的操作

另外,异常块中的两行

catch (Exception error)
{
    downloadOk = false;
    string err = error.Message;
}

……什么也不做。downloadOk在异常块中始终为false,并且在局部变量err超出范围之前从未使用过。

Yep站点需要登录。所以在我用我的ID和密码登录之后,我只需手动上传文件并运行代码。我也尝试删除该文件,然后运行代码,但它仍然会下载网页内容。因此,您对我修复此问题有什么建议吗?请提供有关myURL指向的内容以及您实际收到的网页内容的更多信息。感谢您指出这一点,但我希望清楚易读。下载该文件后,我打开下载文件,看到了一堆网页标签,所以可能不是真正的网页内容,而是一堆我不理解的标签。它喜欢html标签之类的东西。是的,myURL实际上指向我的CSV文件所在的位置。例如,DownloadFile@,dummy.csvlocal变量err,我只是在调试时使用它来查看错误消息的类型,因为我不想在消息框中显示异常错误。yep myURL以/,文件名在下载文件的第二个参数中。在myURL中的“/”后面添加文件名。下载文件中的标记如下:真的,我必须在/之后添加我的文件名,因此如下所示:client.DownloadFilemyURL+CSVfile,CSVfile;对第一个参数必须指定文件的位置,而不仅仅是文件所在的目录,正如您在问题中所看到的那样。
catch (Exception error)
{
    downloadOk = false;
    string err = error.Message;
}