Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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#_Asp.net_.net_Iis - Fatal编程技术网

c#-写入响应时文件损坏

c#-写入响应时文件损坏,c#,asp.net,.net,iis,C#,Asp.net,.net,Iis,我正在尝试使用ASP.Net将文件写入输出响应流。当我下载该文件时,在打开.zip文件时发现错误。您可以从此存档中提取文件,但其他程序可能无法打开它。是否要尝试解决问题?错误。但是,我可以取消此操作并正确打开zip文件 我可能做错了什么 ASP.Net\C#代码: var pathToFile = "c:\abc.zip"; string fileName = Path.GetFileName(pathToFile); byte[] buffer; using (var fi

我正在尝试使用ASP.Net将文件写入输出响应流。当我下载该文件时,在打开.zip文件时发现
错误。您可以从此存档中提取文件,但其他程序可能无法打开它。是否要尝试解决问题?
错误。但是,我可以取消此操作并正确打开zip文件

我可能做错了什么

ASP.Net\C#代码:

var pathToFile = "c:\abc.zip";
string fileName = Path.GetFileName(pathToFile);
byte[] buffer;
using (var fileStream = new FileStream(pathToFile, Filemode.open))
{
  buffer = new byte[fileStream. Length];
  fileStream.Read(buffer, 0, (int)fileStream.Length);
}
Response.Clear();
Response.Buffer = true;
Response.AppendHeader("content-disposition", string.Format(@"attachment; filename={0}.zip", filename));
Response.ContentType = "application/zip";
Response.AppendHeader("content-length", buffer.Length.ToString());
Response.WriteFile(pathToFile);

如果要使用
缓冲区
并将文件写入用户,请不要使用
Response.WriteFile

更改为
Response.OutputStream.Write
,然后修改代码,如下所示:

var pathToFile=“c:\abc.zip”;
字符串文件名=Path.GetFileName(pathToFile);
字节[]缓冲区=新字节[0];
使用(var fileStream=newfilestream(pathToFile,FileMode.Open,FileAccess.Read))
{
buffer=新字节[fileStream.Length];
读取(buffer,0,buffer.Length);
}
Response.Clear();
AppendHeader(“内容处置”,string.Format(@“附件;文件名={0}”,文件名));
Response.ContentType=“应用程序/zip”;
Response.OutputStream.Write(buffer,0,buffer.Length);
Response.Flush();
Response.End();

如果您想使用
缓冲区
并将文件写入用户,请不要使用
Response.WriteFile

更改为
Response.OutputStream.Write
,然后修改代码,如下所示:

var pathToFile=“c:\abc.zip”;
字符串文件名=Path.GetFileName(pathToFile);
字节[]缓冲区=新字节[0];
使用(var fileStream=newfilestream(pathToFile,FileMode.Open,FileAccess.Read))
{
buffer=新字节[fileStream.Length];
读取(buffer,0,buffer.Length);
}
Response.Clear();
AppendHeader(“内容处置”,string.Format(@“附件;文件名={0}”,文件名));
Response.ContentType=“应用程序/zip”;
Response.OutputStream.Write(buffer,0,buffer.Length);
Response.Flush();
Response.End();

您可能没有读取完整文件。此外,也不需要将其存储在缓冲区中-您可以直接写入响应。我以前直接写入响应,而没有在响应头中附加内容长度,但得到了相同的错误。如何确保“我读取了完整文件”?您可能没有读取完整文件。此外,也不需要将其存储在缓冲区中-您可以直接写入响应。我以前直接写入响应,而没有在响应头中附加内容长度,但得到了相同的错误。如何确保“我已阅读完整文件”?