G1gg13s 0 / 0 / 0 Регистрация: 30.01.2016 Сообщений: 21 |
||||
1 |
||||
Ошибка времени выполнения: Чтение после конца потока невозможно28.02.2016, 21:32. Показов 10873. Ответов 5 Метки нет (Все метки)
Ошибка в строке 9.
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? Как Вы его создавали?
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
29.02.2016, 20:53 |
Помогаю со студенческими работами здесь Чтение после конца потока невозможно С чем связана ошибка:»Чтение после конца потока невозможно» Подпрограмма выдает ошибку времени выполнения: Чтение после конца потока невозможно Чтение чисел из файла. Чтение после конца потока невозможно Чтение после конца потока невозможно Uses Crt; Чтение после конца потока невозможно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 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];
}
}
Или все же придется ставить еще одну проверку, как я написал выше ?
Помогите пожалуйста разобраться.