MSDN documentation在这方面非常无益,因为我遇到了这种方法,并不完全确定我为什么要这样做或不这样做。
注意:任何人都应该回复“它将文件读入内存”,没有进一步的解释将会被低估。
答案 0 :(得分:6)
Russ对行为是正确的 - 你使用它的原因是为了避免文件打开/锁定 - 特别是因为客户端可能很慢,或者超时,可能更可取的是使内存权衡和缓冲将文件存入内存,因此这个bool允许您自己跳过ReadAllBytes缓冲区,然后编写生成的缓冲区。
答案 1 :(得分:4)
不同之处在于读取文件内容的时间。
如果您为true
传递readIntoMemory
,则会打开文件流,读入内存并关闭,所有这些都会在WriteFile
期间发生。另一方面,如果传递false
,文件流将被打开并再次关闭而不会读取(只是为了验证文件是否存在)。相反,有关要写入的文件的信息将传递到某个内部缓冲区(使用内部HttpWriter.WriteFile
方法)。稍后(可能在刷新响应时,但我还没有验证),将读取文件的内容。
请考虑以下代码:
protected void Page_Load(object sender, EventArgs e)
{
Response.WriteFile(@"C:\myFile", false);
System.IO.File.Move(@"C:\myFile", "C:\myFile2");
Response.End();
}
请注意,您的浏览器不会收到回复,即在Response.End
期间出现非常糟糕的情况。将readIntoMemory
设置为true
可以避免此问题。
答案 2 :(得分:2)
使用Reflector查看,它似乎表明在写入响应之前文件是否应该在内存中缓冲。
使用FileStream
打开文件,然后如果设置了布尔标志,它首先将文件读入字节数组,然后使用WriteBytes
将该数组写入响应。
如果未设置标志,则使用WriteFile
将文件写入响应。
前两种情况都假设正在使用HttpWriter
。如果不是这种情况,则使用WriteStreamAsText
。