Ошибка времени выполнения чтение после конца потока невозможно

В паскале (да и не только) данные в типизированном файле (в вашем случае — file of integer) хранятся в шестнадцатиричном виде. В паскале integer занимал 2 байта, именно поэтому выскочила ошибка «Чтение после конца потока невозможно», ведь «8» — это один байт.

Если вы хотите читать целые числа из текстового файла, используйте TextFile (или Text в олдскульном варианте). Для freepascal, pascalABC.NET и Delphi это будет так:

var 
  a : integer; 
  f : TextFile;
begin
  AssignFile(f, 'f.txt');
  Reset(f);
  //Seek(f, 0);
  Read(f, a); // a = 8, хотя лучше читать сразу всю строку, используя несколько переменных

  <...>
 CloseFile(f);

end.

А в варианте для Turbo Pascal и самых первых версий Delphi — так:

var 
  a : integer; 
  f : Text;
begin
  Assign(f, 'f.txt');
  Reset(f);
  //Seek(f, 0);
  Read(f, a); { a = 8 поскольку в Turbo Pascal // не было комментарием :) }

  <...>
  Close(f);
end.

G1gg13s

0 / 0 / 0

Регистрация: 30.01.2016

Сообщений: 21

1

Ошибка времени выполнения: Чтение после конца потока невозможно

28.02.2016, 21:32. Показов 10873. Ответов 5

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Ошибка в строке 9.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
  A: file of integer;
  B, I, J: integer;
begin
  assign(A, 'D:KEK.txt');
  reset(A);
  while not eof(A) do
    begin
      read(A, B);
      write(B);
    end;
  seek(A, 3);
  read(A, I);
  seek(A, 5);
  read(A, J);
  seek(A, 3);
  write(A, J);
  seek(A, 5);
  write(A, I);
  close(A);
end.

0

318 / 208 / 162

Регистрация: 08.12.2015

Сообщений: 863

28.02.2016, 23:29

2

Вы пытаетесь из текстового файла прочитать как из файла с переменными. Это несколько неверно. seek тоже даст далее ошибку. Так-же , в 17 и 19 строках тоже будет ошибка, пытаетесь записать в тот же файл, не открыв его на запись. В общем, задание неизвестно ,как исправить — непонятно.

0

0 / 0 / 0

Регистрация: 30.01.2016

Сообщений: 21

29.02.2016, 20:37

 [ТС]

3

Есть текстовый файл с текстом ‘123456’ и нужно заменить 3 и и 5 элементы.

0

Почетный модератор

64289 / 47588 / 32739

Регистрация: 18.05.2008

Сообщений: 115,181

29.02.2016, 20:49

4

Лучший ответ Сообщение было отмечено G1gg13s как решение

Решение

А как создан файл А, он точно типизированный?

1

0 / 0 / 0

Регистрация: 30.01.2016

Сообщений: 21

29.02.2016, 20:50

 [ТС]

5

Я — е*лан, сори. Я понял, люблю тебя :*, пусик

0

Puporev

Почетный модератор

64289 / 47588 / 32739

Регистрация: 18.05.2008

Сообщений: 115,181

29.02.2016, 20:53

6

Лучший ответ Сообщение было отмечено G1gg13s как решение

Решение

А зачем у него расширение да еще и txt? Как Вы его создавали?
При чтении типизированного файла целых чисел не может быть ошибки в этом

Pascal
1
2
3
4
5
6
reset(A);
  while not eof(A) do
    begin
      read(A, B);
      write(B);
    end;

1

IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

29.02.2016, 20:53

Помогаю со студенческими работами здесь

Чтение после конца потока невозможно
Выдаёт такую ошибку. Помогите :-|

С чем связана ошибка:»Чтение после конца потока невозможно»
С чем связана ошибка:&quot;Чтение после конца потока невозможно&quot;.

Подпрограмма выдает ошибку времени выполнения: Чтение после конца потока невозможно
Дан файл, содержащий сведения об игрушках: указывается название игрушки, ее стоимость в рублях и…

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите.
В Pascal’e я не силен, так что не бейте меня ногами, но есть задача: написать…

Чтение после конца потока невозможно
Сам код:

Uses Crt;
var i,k:integer;
f: file;
a,b:real;
Begin
Assign(f,…

Чтение после конца потока невозможно
var f:file of integer;
i,a,max,l:integer;
begin
assign(f,’f.txt’);
reset(f);
i:=0;
while…

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

Или воспользуйтесь поиском по форуму:

6

В паскале (да и не только) данные в типизированном файле (в вашем случае — file of integer) хранятся в шестнадцатиричном виде. В паскале integer занимал 2 байта, именно поэтому выскочила ошибка «Чтение после конца потока невозможно», ведь «8» — это один байт.

Если вы хотите читать целые числа из текстового файла, используйте TextFile (или Text в олдскульном варианте). Для freepascal, pascalABC.NET и Delphi это будет так:

var 
  a : integer; 
  f : TextFile;
begin
  AssignFile(f, 'f.txt');
  Reset(f);
  //Seek(f, 0);
  Read(f, a); // a = 8, хотя лучше читать сразу всю строку, используя несколько переменных

  <...>
 CloseFile(f);

end.

А в варианте для Turbo Pascal и самых первых версий Delphi — так:

var 
  a : integer; 
  f : Text;
begin
  Assign(f, 'f.txt');
  Reset(f);
  //Seek(f, 0);
  Read(f, a); { a = 8 поскольку в Turbo Pascal // не было комментарием :) }

  <...>
  Close(f);
end.
type
  base = record
    n1, n2: string[15];
    tel: string[4];
    d, m: byte;
    y: integer;
  end;
 
var
  r: base;
  a: array [1..10] of base; f: file of base; 
  i: integer;
 
begin
  assign(f, 'in.dat');
  rewrite(f); // создаем новый файл
  for i := 1 to 10 do // заполняем его 10 значениями "от балды", чтобы был понятен принцип
  begin
    r.d := i; r.m := i; r.y := i; // тут тестовые значения
    r.n1 := 'start';
    r.n2 := 'finish';
    r.tel := '3234';
    write(f, r); // пишем структуру в файл
  end;
  close(f);
  
  reset(f); // переоткрываем файл уже для чтения
  i := 0;
  while not eof(f) do // и читаем содержимое в массив a
  begin
    inc(i);
    read(f, a[i]); // в этой строке не показывает никакой ошибки
  end;
  close(f);
end.

Приветствую, мне требуется ваша помощь, уже не знаю, что делать, весь интернет перерыл, и всем помогает Position = 0,а мне нет.

private static byte[] buffer = new byte[1024];
    private static MemoryStream stream = new MemoryStream(buffer);
    private static BinaryWriter writer = new BinaryWriter(stream);
    private static BinaryReader reader = new BinaryReader(stream);

    private List<string> listCode = new List<string>();

void ReceiveData()
    {
        int bytes = 0;

        EndPoint remoteIp = new IPEndPoint(IPAddress.Any, 0);
        listCode.Clear();

        do
        {
            bytes = socket.ReceiveFrom(buffer, ref remoteIp);
        }
        while (socket.Available > 0);


        bool getData = true;

        stream.Position = 0;

        try
        {
            while (getData)
            {
                string data = reader.ReadString(); // ВОТ ТУТ КОД ВЫДАЕТ ИСКЛЮЧЕНИЕ ПОСЛЕ ТОГО КАК ДАННЫЕ С СЕРВЕРА ПРИХОДЯТ 2-ОЙ РАЗ
                if (data != "")
                    listCode.Add(data);
                else
                    getData = false;
            }
        }
        catch(Exception ex)
        {
            Debug.Log(ex.Message);
        }

        stream.SetLength(0);
        stream.Position = 0;

        IPEndPoint remoteFullIP = remoteIp as IPEndPoint;
    }

Подскажите пожалуйста! Всем спасибо!

Всем доброго времени суток, столкнулся с проблемой

Чтения после конца потока невозможно

Дело в том что я читаю бинарный файл :

 while (reader2.PeekChar() > -1)
 {

    numb2 = reader2.ReadInt32();

    Int32 ndef2 = reader2.ReadInt32();

    BitVector32 bv2 = new BitVector32(ndef);

    int nr2 = bv2[nr_s];

    y2 = bv2[y_s];

    int sm2 = bv2[sm_s];

    ds2 = bv2[d_s];

    ms2 = bv2[m_s];

    int rs2 = bv2[r_s];

}

И так получилось что numb2 имеет запись в файле поэтому reader2.PeekChar() > -1 больше 1, но вот ndef2 уже нету в файле, и я получаю ошибку чтения после конца потока, может есть более правильный метод инициализации данных в файле, и если дальше записи нет, то просто передать 0 и перейти дальше, либо пропускать и идти дальше, просто не хотелось бы делать что-то вроде:

 while (reader2.PeekChar() > -1)
 {

    numb2 = reader2.ReadInt32();

  if (reader2.PeekChar() > -1){

    Int32 ndef2 = reader2.ReadInt32();

    BitVector32 bv2 = new BitVector32(ndef);

    int nr2 = bv2[nr_s];

    y2 = bv2[y_s];

    int sm2 = bv2[sm_s];

    ds2 = bv2[d_s];

    ms2 = bv2[m_s];

    int rs2 = bv2[r_s];
    }

}

Или все же придется ставить еще одну проверку, как я написал выше ?
Помогите пожалуйста разобраться.

type
  base = record
    n1, n2: string[15];
    tel: string[4];
    d, m: byte;
    y: integer;
  end;
 
var
  r: base;
  a: array [1..10] of base; f: file of base; 
  i: integer;
 
begin
  assign(f, 'in.dat');
  rewrite(f); // создаем новый файл
  for i := 1 to 10 do // заполняем его 10 значениями "от балды", чтобы был понятен принцип
  begin
    r.d := i; r.m := i; r.y := i; // тут тестовые значения
    r.n1 := 'start';
    r.n2 := 'finish';
    r.tel := '3234';
    write(f, r); // пишем структуру в файл
  end;
  close(f);
  
  reset(f); // переоткрываем файл уже для чтения
  i := 0;
  while not eof(f) do // и читаем содержимое в массив a
  begin
    inc(i);
    read(f, a[i]); // в этой строке не показывает никакой ошибки
  end;
  close(f);
end.

Приветствую, мне требуется ваша помощь, уже не знаю, что делать, весь интернет перерыл, и всем помогает Position = 0,а мне нет.

private static byte[] buffer = new byte[1024];
    private static MemoryStream stream = new MemoryStream(buffer);
    private static BinaryWriter writer = new BinaryWriter(stream);
    private static BinaryReader reader = new BinaryReader(stream);

    private List<string> listCode = new List<string>();

void ReceiveData()
    {
        int bytes = 0;

        EndPoint remoteIp = new IPEndPoint(IPAddress.Any, 0);
        listCode.Clear();

        do
        {
            bytes = socket.ReceiveFrom(buffer, ref remoteIp);
        }
        while (socket.Available > 0);


        bool getData = true;

        stream.Position = 0;

        try
        {
            while (getData)
            {
                string data = reader.ReadString(); // ВОТ ТУТ КОД ВЫДАЕТ ИСКЛЮЧЕНИЕ ПОСЛЕ ТОГО КАК ДАННЫЕ С СЕРВЕРА ПРИХОДЯТ 2-ОЙ РАЗ
                if (data != "")
                    listCode.Add(data);
                else
                    getData = false;
            }
        }
        catch(Exception ex)
        {
            Debug.Log(ex.Message);
        }

        stream.SetLength(0);
        stream.Position = 0;

        IPEndPoint remoteFullIP = remoteIp as IPEndPoint;
    }

Подскажите пожалуйста! Всем спасибо!

Ошибка времени выполнения чтение после конца потока невозможно

На чтение 4 мин Опубликовано Обновлено

Ошибка «чтение после конца потока невозможно» возникает во время выполнения программы, когда происходит попытка прочитать данные из потока, который уже достиг конца. Такая ситуация может возникнуть, например, при чтении данных из файла или взаимодействии с сетью.

Проблема может возникнуть из-за неправильной работы с потоками ввода-вывода. Возможны несколько вариантов решения этой ошибки. Во-первых, стоит проверить, достигнут ли конец потока, прежде чем читать данные из него. Это можно сделать с помощью соответствующих методов, таких как feof для файла или isEOF для потока ввода-вывода в языке программирования Python.

Еще одним вариантом решения проблемы может быть использование исключений. Если после чтения данных из потока будет выброшено исключение, это может сигнализировать о достижении конца потока. В таком случае, можно использовать блок try-catch для перехвата и обработки исключения.

Также следует убедиться, что данные не читаются более одного раза после достижения конца потока. Если вы уже прочитали все данные из потока, а затем пытаетесь прочитать еще раз, это приведет к ошибке. Поэтому необходимо следить за тем, чтобы чтение данных происходило только до достижения конца потока.

Итак, чтобы избежать ошибки «чтение после конца потока невозможно», необходимо правильно работать с потоками ввода-вывода, проверять достижение конца потока перед чтением данных и обрабатывать исключения, которые могут возникнуть при чтении данных. Это позволит избежать неприятных ситуаций при выполнении программы и обеспечит ее более плавное выполнение.

Ошибки времени выполнения: причины и решения

Ошибки времени выполнения возникают, когда программа обнаруживает некорректное поведение или ограничения во время выполнения. Такие ошибки могут быть вызваны различными причинами:

  • Неправильные данные: Одной из основных причин ошибок времени выполнения являются неправильные или некорректные данные, передаваемые программе. Если программа не может обработать эти данные, она может выдать ошибку.
  • Нехватка ресурсов: Отсутствие необходимых ресурсов, таких как память, диск или сетевое соединение, может вызывать ошибки времени выполнения. Программа может пытаться обратиться к ресурсу, который недоступен, что приводит к ошибке.
  • Неправильное использование API: Использование неправильных или устаревших версий API может вызвать ошибки времени выполнения. Некорректные вызовы API или неправильное использование их функций могут привести к неожиданным результатам и ошибкам.
  • Недостаточная проверка ошибок: Если программа не выполняет достаточную проверку ошибок, она может не смочь обработать некорректные ситуации и выбросить исключение.

Чтобы решить ошибки времени выполнения, необходимо:

  1. Анализировать причину ошибки: Используйте отладчик или журналы ошибок, чтобы выяснить, что именно вызывает ошибку. Просмотрите код и убедитесь, что все данные и ресурсы используются правильным образом.
  2. Проверить входные данные: Убедитесь, что программа получает корректные и правильно отформатированные данные. Если входные данные некорректны, выполните проверку и сделайте необходимые изменения.
  3. Управление ресурсами: Удостоверьтесь, что программе доступны все необходимые ресурсы, такие как память, диск и сетевое соединение. Если ресурс недоступен, выполните необходимые действия для его восстановления или предупреждения пользователя.
  4. Обрабатывать ошибки: Добавьте обработку ошибок в код программы, чтобы она могла корректно реагировать на некорректные ситуации. Используйте конструкции try-catch, чтобы перехватывать и обрабатывать исключения.

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

Решение ошибки времени выполнения: чтение после конца потока

Ошибка времени выполнения «чтение после конца потока невозможно» возникает, когда программа пытается читать данные из потока после того, как он был закрыт или достиг конца. Эта ошибка может возникнуть, например, при выполнении операции чтения файла, чтении данных с сервера или из другого источника.

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

  1. Убедитесь, что поток открыт и доступен для чтения. Проверьте, что файл существует, сервер доступен и т.д.
  2. Проверьте текущую позицию чтения в потоке. Убедитесь, что вы находитесь внутри потока и не пытаетесь прочитать за пределами его.
  3. Убедитесь, что вы правильно используете методы чтения потока. Некоторые методы могут возвращать специальные значения, указывающие на конец потока или ошибку чтения. Используйте эти значения для обработки ситуации, когда данные закончились или возникла ошибка.
  4. Проверьте, что поток закрыт после окончания операций чтения. Закрытие потока поможет избежать дальнейших попыток его чтения и предотвратит возникновение ошибки.
  5. Обработайте исключения, которые могут возникнуть во время операций чтения. Исключения, такие как IOException или EndOfStreamException, могут указывать на проблемы с доступом к данным или ошибки чтения.

Следуя этим рекомендациям, вы сможете предотвратить ошибку времени выполнения «чтение после конца потока невозможно» и обработать ее ситуацию корректно в своей программе.

Понравилась статья? Поделить с друзьями:
  • Ошибка времени выполнения файл не открыт на чтение
  • Ошибка вольво xc90 0094
  • Ошибка времени выполнения файл не открыт на запись
  • Ошибка вольво vmcu
  • Ошибка времени выполнения файл не найден pascal