【问题标题】:Last character of text file is not retrieved with System.IOSystem.IO 不检索文本文件的最后一个字符
【发布时间】:2013-01-18 03:51:42
【问题描述】:

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

【问题讨论】:

  • 对我来说很好。也许您的文件有些“不确定”?
  • 请您再用上面的文字检查一遍好吗?谢谢
  • 流处理本身似乎没问题,所以我怀疑您处理 Web 请求/响应的方式存在问题。跟踪 http 请求/响应(标头和正文)可能会有所帮助。您可以使用诸如 fiddler (fiddler2.com/fiddler2) 之类的工具来捕获它们
  • 发布在您的while循环之后执行的任何代码也可能会有所帮助,特别是如果它处理Response
  • @Nathan : 我已经更新了 C# 代码,这就是我在方法中的全部内容。

标签: c# streamreader outputstream streamwriter .net


【解决方案1】:

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

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

【讨论】:

  • 我的朋友,我仍然有问题..我已经编辑了我的帖子,现在我在文件中显示我的整个文本。请用那个测试
  • @Alexei Levenkov:如果我使用你的代码,那么我没有得到正确的输出,它甚至没有发送完整的文件,它只是发送了大约 3/4 的文件.
【解决方案2】:

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

【讨论】:

  • 我已经在给 FLUSH 打电话了……它只是没有写在这里。对此感到抱歉
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多