Проблема с копированием содержимого файла JPG StreamReader и StreamWriter - PullRequest
0 голосов
/ 03 июня 2011

У меня проблема с тем, что моя программа не может прочитать большинство символов во входном потоке с помощью StreamReader.Он загружает только первые 16b каждого символа, а если символ 32b, он удаляет оставшиеся 16b (делая все 0).

Мне нужно манипулировать содержимым файла (шифровать и дешифровать позже).Он отлично работает с ASCII, UTF-8, UTF-7.

Вот пример выбранного изображения и изображения после шифрования и дешифрования: Before and After

Уже пробовал с Encoding.Default или установка кодировки и ничего не работает.

Код, который я написал, работает правильно с файлом .txt только на английском языке, это не проблема.Возникла проблема с загрузкой файла с шифрованием StreamReader s, вызванная dataloss.Выбранный и результирующий файлы имеют одинаковый размер, некоторые данные просто обнуляются.

Ответы [ 2 ]

2 голосов
/ 03 июня 2011

StreamReader сначала пытается автоматически определить кодировку, а если не может, то использует кодировку, предоставленную пользователем. После вызова вашего первого Read вы можете получить доступ к свойству CurrentEncoding на StreamReader и посмотреть, изменилось ли оно. Было бы интересно узнать, происходит ли это так.

Кроме того, ваш заголовок говорит, что вы копируете содержимое файла jpg, но в своем вопросе вы говорите, что копируете текстовые файлы. Мне интересно, что вы делаете, потому что StreamReader предназначен только для текстовых файлов. Вы могли бы использовать BinaryReader, но я думаю, что я бы просто использовал Stream в этом случае. StreamReader предназначен для ввода символов в определенной кодировке, тогда как класс Stream предназначен для ввода и вывода байтов.

2 голосов
/ 03 июня 2011

Для нетекстового файла вам, вероятно, следует использовать BinaryReader и BinaryWriter . Это позволит вам читать / записывать байты напрямую и избегать их интерпретации как текста (что и делал бы StreamReader).

...