Как записать данные MemoryStream в файл - PullRequest
0 голосов
/ 06 марта 2012

У меня есть этот код:

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' запрещен.

Ответы [ 2 ]

8 голосов
/ 06 марта 2012

Что ж, вероятно, это означает, что у вас нет доступа на запись к 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 голосов
/ 18 декабря 2015

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...