Чтение текстового файла (который является членом PDS FB 80)
hFile = fopen(filename,"r");
и дошли до того места в файле, где осталась только пустая строка.
FilePos = ftell(hFile);
Затем прочитайте последнюю строку, которая содержит только символ '\n'
.
fseek(hFile, FilePos, SEEK_SET);
терпит неудачу с: -
errno=(27) EDC5027I The position specified to fseek() was invalid.
Позиция, указанная для fseek()
, была возвращена ftell()
несколькими строками ранее. Он имеет значение 841 в конкретном случае ошибки, который я видел. При проверке в отладчике это же значение вернул ftell
несколькими строками ранее. Он не был поврежден.
Тот же код работает в других позициях в файле и дает сбой только в том месте, где остается одна пустая строка для чтения, когда позиция запоминается.
Мое понимание того, как должно работать ftell
/fseek
, кратко отражено в другом ответе на SO.
Значение, возвращаемое ftell в текстовом потоке, не имеет предсказуемой связи с количеством символов, которые вы уже прочитали. Единственное, на что вы можете положиться, это то, что вы можете использовать его впоследствии в качестве аргумента смещения для fseek или fseeko, чтобы вернуться к той же позиции в файле.
Казалось бы, я не могу полагаться на то единственное, на что я должен быть в состоянии положиться.
У меня вопрос, почему fseek
терпит неудачу таким образом?
export _EDC_ZERO_RECLEN=Y
. - person Milos Lalovic   schedule 16.07.2020'\n'
считается нулем? - person Morag Hughson   schedule 18.07.2020