2016-07-01 4 views
3

Я пытаюсь написать HTTP-контент в FileStream, и я получаю сообщение об ошибке «Не удается получить доступ к закрытому файлу» в строке, где я делаю Ожидание CopytoAsync (поток). Если я удалю «жду», он продолжит операцию без каких-либо исключений, однако размер записанного файла составляет 0 КБ. Любая идея, когда я совершаю ошибку?C#, Проблема с записью содержимого HTTP в FileStream, Не удается получить доступ к закрытому файлу

var provider = new MultipartFormDataStreamProvider(tempdir); 
    await Request.Content.ReadAsMultipartAsync(provider); 
      foreach (var content in provider.Contents) 
    { 
     using (var stream = new FileStream(serverPath, FileMode.Create, FileAccess.ReadWrite)) 
       { 
        await content.CopyToAsync(stream); 
       } 
    } 
+1

В чем исключение также указывает, какой файл вызывает исключение? Интересно, вызвано ли исключение доступом к файлу в tempdir или доступом к файлу в serverPath. То, что вы не получаете исключения при удалении ожидания, просто объяснить: вызывается метод CopyToAsync, но без ожидания, что вызывающий абонент перейдет к следующему циклу, не дожидаясь, пока часть asyn CopyToAsync достигнет той части, где он бросает. Я подозреваю, что исключение все еще бросается, но становится незаметным исключением – Ladi

+0

@Ladi ваше подозрение в ожидании абсолютно верно. Исключение происходит очень случайным образом. иногда для доступа к tempdir и часто доступа к пути к серверу. Мне удалось сделать это с кодом, который я опубликовал в качестве ответа. – Benjamin

ответ

4

Я решил проблему, используя свойство FileData вместо Content в MultipartFormDataStreamProvider.

Кроме того, я больше не использую CopyToAsync, вместо этого я использую обычный File.Move, и он отлично работает для меня.

var provider = new MultipartFormDataStreamProvider(tempdir); 
    await Request.Content.ReadAsMultipartAsync(provider); 
     foreach (var content in provider.FileData) 
      { 
       File.Move(content.LocalFileName, serverPath); 
      } 
+0

Он работал и для меня, как ни странно, FileStream и CopyToAsync из HttpContent не работают в сценарии async – Raffaeu

 Смежные вопросы

  • Нет связанных вопросов^_^