使用C#中的WebClient下载Csv文件,但文件大小小于使用浏览器下载时的大小

使用C#中的WebClient下载Csv文件,但文件大小小于使用浏览器下载时的大小,c#,.net,webclient,downloadfile,C#,.net,Webclient,Downloadfile,我有一个返回csv文件的链接。当我在浏览器(Chrome,Firefox,…)中打开它时,下载的文件大小为86 KB,但当我想以低于代码大小的方式下载它时,它只有25 KB,当我打开下载的文件时,它没有正确的数据(意味着没有列,无法读取数据) 您可以在浏览器中尝试并编写代码 webClient将返回zip文件而不是纯文本/csv文件 我将wc输出文件扩展名更改为zip,它正在工作。。。 zip将包含您在参数中指定的文件 正如Akshay Sandhu指出的,下载的文件是用gzip编码压缩的,这

我有一个返回csv文件的链接。当我在浏览器(Chrome,Firefox,…)中打开它时,下载的文件大小为86 KB,但当我想以低于代码大小的方式下载它时,它只有25 KB,当我打开下载的文件时,它没有正确的数据(意味着没有列,无法读取数据)

您可以在浏览器中尝试并编写代码


webClient将返回zip文件而不是纯文本/csv文件 我将wc输出文件扩展名更改为zip,它正在工作。。。 zip将包含您在参数中指定的文件


正如Akshay Sandhu指出的,下载的文件是用gzip编码压缩的,这就是为什么在试图将其作为csv打开时显示为已损坏的原因。 要下载文件并自动解码,请参考以下两个SO答案。 首先使用HttpWebRequest类而不是WebClient类下载文件,如下所示:

然后确保文件自动解压缩。看看这个

以下是工作代码:

string url = "http://tsetmc.com/tsev2/data/Export-txt.aspx?t=i&a=1&b=0&i=43283802997035462";
string path = "111.csv";

using (FileStream fileStream = new FileStream(path, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write))
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = WebRequestMethods.Http.Get;
    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

    const int BUFFER_SIZE = 16 * 1024;
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        using (var responseStream = response.GetResponseStream())
        {
            var buffer = new byte[BUFFER_SIZE];
            int bytesRead;
            do
            {
                bytesRead = responseStream.Read(buffer, 0, BUFFER_SIZE);
                fileStream.Write(buffer, 0, bytesRead);
            } while (bytesRead > 0);
        }
    }
}

在将gzip读入文件之前,需要对其进行解压缩

var url = new Uri("http://tsetmc.com/tsev2/data/Export-txt.aspx?t=i&a=1&b=0&i=43283802997035462");
var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var fileName = "111.csv";

using (WebClient wc = new WebClient())
using (Stream s = File.Create(Path.Combine(path, fileName)))
using (GZipStream gs = new GZipStream(wc.OpenRead(url), CompressionMode.Decompress))
{
    //Saves to C:\Users\[YourUser]\Desktop\111.csv
    gs.CopyTo(s);
}

你是说我把文件另存为.zip?如果是,然后如何打开它(提取?)这应该可以帮助你。。。
var url = new Uri("http://tsetmc.com/tsev2/data/Export-txt.aspx?t=i&a=1&b=0&i=43283802997035462");
var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var fileName = "111.csv";

using (WebClient wc = new WebClient())
using (Stream s = File.Create(Path.Combine(path, fileName)))
using (GZipStream gs = new GZipStream(wc.OpenRead(url), CompressionMode.Decompress))
{
    //Saves to C:\Users\[YourUser]\Desktop\111.csv
    gs.CopyTo(s);
}