Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 下载怪异的行为_C#_Httpwebrequest_Webrequest_Tableau Api - Fatal编程技术网

C# 下载怪异的行为

C# 下载怪异的行为,c#,httpwebrequest,webrequest,tableau-api,C#,Httpwebrequest,Webrequest,Tableau Api,因此,我尝试使用C#从internet下载文件,有两种文件:.twb和.twbx,其中.twbx是一个包含.twb和其他两个文件夹的zip文件。我的下载程序在下载.twb文件时运行良好,但是当我下载.twbx文件时,我总是得到一个完全不同的文件-相同的名称,但大小和内容非常不同。知道为什么会这样吗 以下是下载代码: request = setUpRequest(dLink); ((HttpWebRequest)request).KeepAlive = true; ((HttpWebReque

因此,我尝试使用
C#
从internet下载文件,有两种文件:
.twb
.twbx
,其中
.twbx
是一个包含
.twb
和其他两个文件夹的zip文件。我的下载程序在下载
.twb
文件时运行良好,但是当我下载
.twbx
文件时,我总是得到一个完全不同的文件-相同的名称,但大小和内容非常不同。知道为什么会这样吗


以下是下载代码:

request = setUpRequest(dLink);

((HttpWebRequest)request).KeepAlive = true;
((HttpWebRequest)request).Host = host;
((HttpWebRequest)request).Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
((HttpWebRequest)request).Referer = referer;
((HttpWebRequest)request).Headers["Accept-Encoding"] = "gzip,deflate,sdch";
((HttpWebRequest)request).Headers["X-CSRF-Token"] = CSRF_TOKEN;
((HttpWebRequest)request).Headers["X-Prototype-Version"] = "1.7_rc3";
((HttpWebRequest)request).Headers["X-Requested-With"] = "XMLHttpRequest";
((HttpWebRequest)request).Headers["Origin"] = origin;

response = getResponse(request);
Stream resp = response.GetResponseStream();

if ((response.ContentEncoding.ToLower().Contains("gzip")))
{
    resp = new System.IO.Compression.GZipStream(resp, System.IO.Compression.CompressionMode.Decompress);
}
else if ((response.ContentEncoding.ToLower().Contains("deflate")))
{
    resp = new System.IO.Compression.DeflateStream(resp, System.IO.Compression.CompressionMode.Decompress);
}
String buffer = new StreamReader(resp, System.Text.Encoding.UTF8).ReadToEnd();

String filename = response.Headers["Content-Disposition"];
filename = Regex.Match(filename, "\".*\"").Value;
filename = filename.Substring(1, filename.Length - 2);
//Console.WriteLine("Writing content to {0}...", filename);
System.IO.File.WriteAllText(directory + filename, buffer);
resp.Close();
resp.Dispose();

下面是
setUpRequest()
,以防您好奇:

    private static WebRequest setUpRequest(String url)
    {
        WebRequest request = WebRequest.Create(url);
        ((HttpWebRequest)request).CookieContainer = cookieContainer;
        request.PreAuthenticate = true;
        request.UseDefaultCredentials = true;
        ((HttpWebRequest)request).AllowAutoRedirect = false;
        return request;
    }

您不应该将二进制内容解码为文本,因为那样会破坏二进制内容。只需将原始字节从输入流复制到
文件流

String filename = response.Headers["Content-Disposition"];
filename = Regex.Match(filename, "\".*\"").Value;
filename = filename.Substring(1, filename.Length - 2);
using (FileStream target = new FileStream(directory + filename, FileMode.Create, FileAccess.Write))
     resp.CopyTo(target);
resp.Close();
resp.Dispose();