使用System.IO无法检索文本文件的最后一个字符

时间:2013-02-03 06:03:44

标签: c# streamreader outputstream streamwriter .net

我尝试使用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.FlushClose()的情况下再次测试它并且它正在运行。

2 个答案:

答案 0 :(得分:2)

Stream.CopyTo是更简单的方法(只要您可以使用.Net 4.0)。

using (var stream = System.IO.File.OpenRead(path))
{
  stream.CopyTo(outStream);
}

答案 1 :(得分:0)

我认为您需要致电Response.Flush()outStream.Flush()