0

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

    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;
        }
    }
4

3 回答 3

1

我猜myURL以“/”而不是“.csv”结尾,对吗?您是否认为myURL + CSVFile它将包含文件的完整路径?它不会。(参见文档) URL 必须是文件本身的路径。你可以有这样的东西:

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

如果我不在正确的轨道上,请告诉 URL 中的内容以及下载文件中前几个标签中的一些内容。

于 2009-06-29T02:50:29.493 回答
0

该网站是否需要登录并且它真的在重定向您?

在此之前,我有一个需要我伪造我的浏览动作(并存储 cookie 等),然后才能下载我需要的文件。

于 2009-06-29T02:51:17.557 回答
-1

对不起,“网页内容”中的“网页”是什么意思。这里只涉及一个 URL,即 myURL。myURL 是否直接指向 CSV 文件?如果是这样,那么您收到的内容实际上是什么样的?

还:

if (File.Exists(CSVfile))
    downloadOk = true;
else
    downloadOk = false;

……很尴尬。请写出:

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”在超出范围之前从未使用过。

于 2009-06-29T02:57:05.330 回答