Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 21.06.2021
Сообщений: 87
1

Работа с потоками (Stream), запись и чтение из файла

17.04.2022, 19:16. Показов 1070. Ответов 3

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите пжлст причину ошибки "Stream was not readable" , возникает при чтение потока BinaryReader-ром

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.IO;
using System.Collections.Generic;
using System.Collections;
using System.Text;
 
 
namespace CatalogsWorks
{
    class Program
    {
        static void Main(string[] args)
        {
            //создали папки
            DirectoryInfo catalog = new DirectoryInfo(@"D:\TEST2");
            catalog.Create();
            catalog.CreateSubdirectory("Subdir");
            //создали текст файл и поток открыли
            FileInfo Textfile = new FileInfo(@"D:\TEST2\Textfaile.txt");
            FileStream stream = Textfile.Create();
 
            // создали writer
            BinaryWriter writer = new BinaryWriter(stream);// подвязываем к писцу поток
 
            int A = 20, B = 5, C;
            C = A + B;
            writer.Write(C);
            Console.WriteLine("File has been written");
            writer.Close();
 
            // создали reader
            BinaryReader reader = new BinaryReader(stream); // ОШИБКА
 
            //читаем/записываем в переменную
            int Rezult = reader.ReadInt32();
            
            Math.Sqrt(Rezult); // Находим корень кв-й
 
            Console.WriteLine(Rezult);
 
            reader.Close();
 
            Console.WriteLine("\n" + new string('_', 12));
            Console.WriteLine("I done the");
            Console.ReadLine();
 
        }
    }
}
Миниатюры
Работа с потоками (Stream), запись и чтение из файла  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2022, 19:16
Ответы с готовыми решениями:

Чтение из файла, запись в файл и работа с TList несколькими потоками
Есть задача, основная часть работы которой сводится к алгоритму: 1. Прочитать из текстового...

Написать программу с тремя потоками: чтение из файла, возведение в квадрат, запись в файл
Нужно написать программу с 3-мя потоками: чтение из файла, возведение в квадрат, запись в файл...

Работа со stream потоками+указатели
Всем привет. Есть функция осуществляющая вывод инфы с помощью потоков (cin, cout ...). Эту же инфу...

Работа с файлами, запись строки в файл и чтение из файла
Короче у меня задание типа записать строку в old.txt, потом считать это, найти самое маленькое...

Stream Binary File (чтение Файла)
Добрый день. Задача следующая: есть файл, в нем 7 байт. Надо с помощью ssjs разобрать эти байты...

3
Администратор
Эксперт .NET
17567 / 13789 / 5299
Регистрация: 17.03.2014
Сообщений: 28,272
Записей в блоге: 1
17.04.2022, 20:05 2
Barbaris98, закрытие BinaryWriter закрывает поток. Чтобы это не происходило необходимо вызывать другую перегрузку конструктора. Плюс необходимо перемотать поток в начало чтобы можно было прочитать ранее записанные данные.
C#
23
BinaryWriter writer = new BinaryWriter(stream, Encoding.UTF8, leaveOpen: true);// подвязываем к писцу поток
Другой способ это открывать поток по новой.
1
2 / 2 / 0
Регистрация: 21.06.2021
Сообщений: 87
19.04.2022, 19:43  [ТС] 3
OwenGlendower, Подскажите, как переместить "указатель" в начало? как понял теперь у меня из-за этого дальше код не идёт (см влож. файл). На msdn написано , что BinaryReader сам возвращает указатель файла в начало и считывает его содержимое. ( https://docs.microsoft.com/ru-... -data-file )

Исправленный код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.IO;
using System.Collections.Generic;
using System.Collections;
using System.Text;
 
 
namespace CatalogsWorks
{
    class Program
    {
        static void Main(string[] args)
        {
            //создали папки
            DirectoryInfo catalog = new DirectoryInfo(@"D:\TEST2");
            catalog.Create();
            catalog.CreateSubdirectory("Subdir");
            //создали текст файл и поток открыли
            FileInfo Textfile = new FileInfo(@"D:\TEST2\Textfaile.txt");
            FileStream stream = Textfile.Create();
 
            // создали writer
 
            BinaryWriter writer = new BinaryWriter(stream, Encoding.UTF8, leaveOpen: true);  // Откорректированное место
            // stream- Поток , Encoding.UTF8- тип кодировки (по-умолчанию), leaveOpen: true - поток не закрывать
            
 
            int A = 20, B = 5, C;
            C = A + B;
            writer.Write(C);
            Console.WriteLine("File has been written");
            writer.Close();
 
 
            
            // создали reader
            BinaryReader reader = new BinaryReader(stream);
 
             
            int Rezult = reader.ReadInt32();  ///!!!! НОвое исключение
            Math.Sqrt(Rezult);
            Console.WriteLine(Rezult);
            //читаем/записываем в переменную
 
 
            Math.Sqrt(Rezult); // Находим корень кв-й
 
 
            reader.Close();
 
 
            Console.WriteLine("\n" + new string('_', 12));
            Console.WriteLine("I done the");
            Console.ReadLine();
 
        }
    }
}
Миниатюры
Работа с потоками (Stream), запись и чтение из файла  
0
Администратор
Эксперт .NET
17567 / 13789 / 5299
Регистрация: 17.03.2014
Сообщений: 28,272
Записей в блоге: 1
19.04.2022, 20:19 4
Лучший ответ Сообщение было отмечено Barbaris98 как решение

Решение

Barbaris98, BinaryReader сам по себе не двигает указатель потока. Это было бы ошибкой с его стороны.

Сдвинуть указатель несложно через свойство Position или методом Seek
C#
1
2
3
4
5
           // возвращаем позицию потока на его начало
           stream.Position = 0;
 
           // создали reader
            BinaryReader reader = new BinaryReader(stream);
1
19.04.2022, 20:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2022, 20:19
Помогаю со студенческими работами здесь

Работа с файлами. Чтение текста из одного файла и запись в другой файл
Есть такое задание: Написать программу, которая считывает текст из файла и записывает в другой...

Работа с двумерными массивами. Чтение данных из текстового файла и запись в текстовый файл
В матрице А найти отношение количества нулевых элементов в количестве ненулевых. Матрицу В...

Чтение из файла, разными потоками по очереди
Как можно реализовать программу, в которой потоки читают текст из файла по очереди. Нашёл...

«Создание файла. Запись и чтение данных. Запись и чтение блоков данных из файла» Переделайте на с С++ на С
#include<iostream> #include<ctime> #include<fstream> #include<random> using namespace std; int...

Как реализовать чтение текстового файла двумя потоками
Есть текстовой файл, в котором в каждой строке написано одно слово. Как можно реализовать в Java...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru