Ошибка потока не была читаемой - PullRequest
2 голосов
/ 22 января 2011

Я написал код ниже и получил ошибку (поток не читался), пока выполняю эту строку SR = New StreamReader(FS) почему и как это исправить

код:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim FS As FileStream
    Dim SR As StreamReader
    Dim SW As StreamWriter
    Dim FS_Out As FileStream
    FS = New FileStream("C:\Temp\My Picture.JPG", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write)
    SR = New StreamReader(FS)
    FS_Out = New FileStream("C:\Temp\My Picture Out.JPG", FileMode.Create, FileAccess.ReadWrite)
    SW = New StreamWriter(FS_Out)

    Dim alltext As String
    FS.Seek(0, SeekOrigin.Begin)
    alltext = SR.ReadToEnd()

    'SW.Write (Buffer)



    SR.Close()
    FS.Close()


End Sub

Ответы [ 3 ]

2 голосов
/ 22 января 2011

Хорошо, посмотрите на то, что вы просили:

FS = New FileStream("C:\Temp\My Picture.JPG", _
                    FileMode.OpenOrCreate, FileAccess.Write)

Вы попросили открыть или создать файл для записи. Ничего о чтении.

Теперь, вдобавок ко всему, вы пытаетесь использовать StreamReader и StreamWriter для файлов jpeg. Не делайте этого. Изображения представляют собой двоичные файлы; TextReader и TextWriter (и подклассы) предназначены для текстовых файлов. Как будет выглядеть строковое представление изображения?

Далее вам следует использовать операторы «Using» , чтобы убедиться, что вы закрываете свои потоки / читатели / пишущие, даже если возникает исключение.

Далее, в большинстве случаев проще всего использовать статические методы класса File для открытия потоков или программ чтения файлов. Таким образом, метод, который вы используете, говорит о том, что вы хотите сделать с потоком - например, File.OpenRead, File.OpenWrite, File.ReadAllText и т. Д.

Далее, если вы действительно хотите скопировать файл, вы можете использовать File.Copy. Если вы хотите прочитать все данные в память и скопировать их, вы можете использовать File.ReadAllBytes и File.WriteAllBytes, что означает, что вам вообще не нужно возиться с потоками.

0 голосов
/ 22 января 2011

Вы открываете FS только с флагом «запись», затем пытаетесь прочитать с него. Лично я всегда использую File.OpenRead, File.OpenWrite и т. Д. - намного проще и , понятнее.

0 голосов
/ 22 января 2011

Похоже, вы не соответствуете режиму на ФС, должно быть FileAccess.ReadWrite.

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