2012-03-06 3 views
0

У меня есть этот код:Как написать данные MemoryStream в файл

private void SaveStreamToFile(string fileFullPath, Stream stream) 
    { 
     if (stream.Length == 0) return; 

     // Create a FileStream object to write a stream to a file 
     using (FileStream fileStream = System.IO.File.Create(fileFullPath, (int)stream.Length)) 
     { 
      // Fill the bytes[] array with the stream data 
      byte[] bytesInStream = new byte[stream.Length]; 
      stream.Read(bytesInStream, 0, (int)bytesInStream.Length); 

      // Use FileStream object to write to the specified file 
      fileStream.Write(bytesInStream, 0, bytesInStream.Length); 
     } 
    } 

Я называю этот метод, как этот SaveStreamToFile (@ "F: \ test.txt", MemoryStream);

У меня ошибка: операция с файлом не разрешена. Доступ к пути «f: \ Test.txt» отклонен.

+1

Вам не нужно вытягивать байты из потока, используйте 'stream.CopyTo (fileStream);'. – ebutusov

ответ

8

Ну, предположительно это означает, что у вас нет доступа для записи к f:\Test.txt. На самом деле это проблема, выходящая за рамки .NET.

Однако, ваш метод не работает. Здесь:

byte[] bytesInStream = new byte[stream.Length]; 
stream.Read(bytesInStream, 0, (int)bytesInStream.Length); 

вы предполагая, что вы можете получить длину потока (не все потоки поддерживают это), и вы также при условии, чтоRead будет читать все это на одном дыхании , Это не обязательно так.

Если вы используете .NET 4, вы можете использовать Stream.CopyTo, что сделает жизнь намного проще. (Хотя это не поможет вам прервать работу, если в потоке нет данных.) Но вам все равно нужно исправить невозможность записи до f:\Test.txt для начала.

0

Я также столкнулся с этой ошибкой и, как предлагает Джон Скит, первым вопросом были права доступа.

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

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