Почему это действие приводит к пустому файлу на стороне клиента?

Почему это действие приводит к пустому файлу на стороне клиента ??


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;                  
}


person Mauro    schedule 24.06.2013    source источник
comment
Я думаю, что код не требует пояснений.   -  person Praveen    schedule 25.06.2013
comment
Может потому, что вы промываете поток перед тем, как вернуть его?   -  person YD1m    schedule 25.06.2013


Ответы (2)


Это может быть связано с тем, что базовый поток (в вашем случае MemoryStream) не позиционируется в начале, когда вы возвращаете его клиенту.

Попробуйте это непосредственно перед оператором return:

stream.Position = 0

Кроме того, эти строки кода:

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

Не требуются, потому что поток основан на памяти. Они нужны только для дисковых или сетевых потоков, где могут быть байты, требующие записи.

person stevewarduk    schedule 24.06.2013

Вы также можете использовать

stream.Seek(0, SeekOrigin.Begin);
person jdehlin    schedule 24.06.2013