未使用System.IO检索文本文件的最后一个字符
本文关键字:最后一个 字符 文件 文本 System IO 检索 未使用 | 更新日期: 2023-09-27 17:57:36
我试图使用OutputStream.Write
编写一个文本文件,但我注意到文件的最后一个字符没有被发送。
无论文件是6KB还是242KB,都会跳过最后一个字符。
AwAIB0UfFlJTSTNABEQWGgMVAhNFBkVeKgVTSx4LCVQMBUUQRUMwBVFTGwcAEAASRRNTBipNQQMFDREYB
BUAH0VIKgVLRVccCRFFGRcbR08wREgDEQENEUkCDRNOTX5cS1ZXHgQGHFYIB0NOfgUIAwMABFQABBcdUg
YpRFcDHgZBAA0TRTEDBj1KQEZXREEdRRIKHFQGK0tARgUbFRULEkUFSF9+R1FXVxwJEUUkAAFQSTBWQQ0
xBBQHDV5MUkFIOgV2RgQYDhoWE0sxTEktQAwKVx8AB0UCDRcAQyxXS1FZSBUcBAIWUldDN1dAAxEHE1QI
E0UTTkJ+TARAFgYVVBAYARdSVSpESkdXAAAcBFg=
注意:整个文本是文本文件中的一行
我的文本文件与上面的有些相似。有人能帮我吗?
我的代码:
var path = Request.QueryString["path"];
path = Server.MapPath(Url.Content("~/Files/" + path + "/somefile.txt"));
Response.Buffer = false;
Response.ContentType = "text/plain";
FileInfo file = new FileInfo(path);
int len = (int)file.Length, bytes;
Response.AppendHeader("content-length", len.ToString());
byte[] buffer = new byte[1024];
Stream outStream = Response.OutputStream;
using (Stream stream = System.IO.File.OpenRead(path))
{
while (len > 0 && (bytes = stream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, bytes);
len -= bytes;
}
}
Response.Flush();
Response.Close();
更新1:现在显示文件中的完整文本
更新2:更新了完整的C#代码
更新3:谢谢我的朋友们,感谢你们的付出!我不知怎么做到了——问题是Response.Flush()
和Response.Close()
;一旦我删除了这两条语句,它就开始工作了。我不明白为什么会出现这个问题,因为我总是使用Response.Flush()
和Response.Close()
。我从来没有收到过这种错误,但这是第一次。如果有人能给我一个解释,我将不胜感激。我会把@AlexeiLevenkov的帖子标记为答案,因为我刚刚在没有Response.Flush
和Close()
的情况下再次测试了它,它正在工作
Stream.CopyTo更容易(只要你能使用.Net 4.0)。
using (var stream = System.IO.File.OpenRead(path))
{
stream.CopyTo(outStream);
}
我认为您需要调用Response.Flush()
或outStream.Flush()