C # .NET 3.5 не копирует поток при использовании базовых примеров - PullRequest
1 голос
/ 29 февраля 2012

Я пытался сделать базовую копию из исходного потока в целевой поток. Я использовал много вопросов, ранее заданных в качестве хороших примеров для реализации, таких как Как сохранить поток в файл в C #? . Однако, когда код, приведенный ниже, выполняется, он завершается при первом запуске, заявляя, что нет данных для копирования. Мой вопрос: как определить, содержит ли исходный поток правильную информацию для передачи из одного файла в другой?

Код выглядит по ссылке выше:

public static void CopyStream(Stream input, Stream output) 
{     
    byte[] buffer =  new byte[8192];
    int len;     
    while ( (len = input.Read(buffer, 0, buffer.Length)) > 0)     
    {output.Write(buffer, 0, len);}     
} 

Ответы [ 2 ]

6 голосов
/ 29 февраля 2012

Если он говорит, что нет данных, то, вероятно, нет данных.

Моя догадка - это то, что вы записали в MemoryStream, а затем передали его как input parmaeter, не перематывая его сначала. (Таким образом, его Position совпадает с Length, что означает, что читать нечего.) Это распространенная ошибка.

Что бы ни случилось, это не тот метод.

как определить, содержит ли исходный поток правильную информацию

В коде? Вы не можете - потому что поток не может узнать, что вы подразумеваете под «правильной информацией». Вы можете написать чеки, чтобы ожидать, что поток не пустой и т. Д. ... но, конечно, это не удастся, если вы когда-нибудь попытаетесь скопировать пустой файл. Без дополнительной информации любая последовательность байтов может быть правильной.

1 голос
/ 29 февраля 2012

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

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