4

を使用してテキスト ファイルを書き込もうとしOutputStream.Writeましたが、ファイルの最後の文字が送信されていないことに気付きました。

ファイルが 6KB であろうと 242KB であろうと、最後の文字はスキップされます。

AwAIB0UfFlJTSTNABEQWGgMVAhNFBkVeKgVTSx4LCVQMBUUQRUMwBVFTGwcAEAASRRNTBipNQQMFDREYB
BUAH0VIKgVLRVccCRFFGRcbR08wREgDEQENEUkCDRNOTX5cS1ZXHgQGHFYIB0NOfgUIAwMABFQABBcdUg
YpRFcDHgZBAA0TRTEDBj1KQEZXREEdRRIKHFQGK0tARgUbFRULEkUFSF9+R1FXVxwJEUUkAAFQSTBWQQ0
xBBQHDV5MUkFIOgV2RgQYDhoWE0sxTEktQAwKVx8AB0UCDRcAQyxXS1FZSBUcBAIWUldDN1dAAxEHE1QI
E0UTTkJ+TARAFgYVVBAYARdSVSpESkdXAAAcBFg=

:テキスト ファイルでは、テキスト全体が 1 行です。

私のテキストファイルは、上記と多少似ています。誰でも私を助けることができますか?

私のコード:

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(); これら2つのステートメントを削除すると、機能し始めました。私はいつも and を使用しているので、なぜこの問題が発生したのかわかりませResponse.Flush()Response.Close()。この種のエラーを受け取ったことはありませんが、これは初めてです。誰かが私に説明を与えることができれば、それはありがたいです。@AlexeiLevenkov の投稿を回答としてマークします。 and なしで再度テストしたところ、Response.Flush機能Close()しています。

4

2 に答える 2

2

Stream.CopyToはより簡単なアプローチです (.Net 4.0 を使用できる限り)。

using (var stream = System.IO.File.OpenRead(path))
{
  stream.CopyTo(outStream);
}
于 2013-02-03T06:17:37.123 に答える
0

私はあなたが電話する必要があると思いますResponse.Flush()またはoutStream.Flush()

于 2013-02-03T06:21:12.627 に答える