为什么此操作会在客户端产生空文件?

时间:2013-06-24 20:17:59

标签: asp.net-mvc streamwriter memorystream fileresult

为什么此操作会在客户端产生空文件?


public FileResult download()
{

    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);

    FileStreamResult fs = new FileStreamResult(stream, "text/plain");
    fs.FileDownloadName = "file.txt";

    writer.WriteLine("this text is missing !!! :( ");

    writer.Flush();
    stream.Flush();

    return fs;                  
}

2 个答案:

答案 0 :(得分:6)

可能是因为当您将其返回给客户端时,底层流(在您的情况下是一个MemoryStream)不会位于开头。

在return语句之前尝试:

stream.Position = 0

此外,这些代码行:

writer.Flush();
stream.Flush();

不需要,因为流是基于内存的。您只需要那些可能存在仍需要写入的字节的磁盘或网络流。

答案 1 :(得分:1)

您也可以使用

stream.Seek(0, SeekOrigin.Begin);