stream.CopyTo - файл пустой.asp.net - PullRequest
25 голосов
/ 19 февраля 2012

Я сохраняю загруженное изображение, используя этот код:

using (var fileStream = File.Create(savePath))
{
   stream.CopyTo(fileStream);
}

Когда изображение сохраняется в папке назначения, оно пустое, 0 кб. Что здесь может быть не так? Я проверил поток. Длина перед копированием и он не пустой.

Ответы [ 2 ]

63 голосов
/ 19 февраля 2012

В вашем коде нет ничего плохого. Тот факт, что вы говорите «Я проверил поток. Длина перед копированием и он не пустой» заставляет меня задуматься о позиции потока перед копированием.

Если вы уже использовали исходный поток один раз, хотя поток не имеет нулевой длины, его позиция может быть в конце потока - поэтому больше нечего копировать.

Если поток доступен для поиска (который будет для MemoryStream или FileStream и многих других), попробуйте поставить

stream.Position = 0

как раз перед копией. Это сбрасывает позицию потока в начало, что означает, что весь код будет скопирован вашим кодом.

0 голосов
/ 17 июня 2019

Эта проблема возникла у меня после переноса моего проекта с .NET Core 1 на 2.2.

Я исправил эту проблему, установив Position моего файлового потока на ноль.

using (var fileStream = new FileStream(savePath, FileMode.Create))
{
    fileStream.Position = 0;
    imageFile.CopyToAsync(fileStream);
}
...