Очистка файлов fopen (), открытых в режиме обновления, между операциями чтения и записи. Требуется явная очистка?

Я прочитал это о переключении между операциями чтения и записи (и наоборот) для файлов, открытых для обновления с помощью (fopen()ССЫЛКА НА САЙТ)"

Для файлов, открытых для обновления (те, которые включают «+» знак), при котором разрешены обе операции ввода и вывода, поток должен быть сброшен (fflush) или перемещен (fseek, fsetpos, rewind) между операцией записи, за которой следует операция чтения, или операцией чтения, которая не достигла конца -файла с последующей операцией записи. "

Есть две вещи, упомянутые здесь, которые я хотел бы выделить

поток должен быть очищен (fflush) или изменен (fseek, fsetpos, rewind)между операцией записи, сопровождаемой операцией чтенияили операция чтения, которая не достигла конца файла, сопровождаемая операцией записи.

1) Что касается первого пункта, мыэксплицитно необходимо выполнить очистку между операцией записи и чтения. Я имею в виду, предположим, если мы намереваемся записать в новый файл, а затем прочитать его обратно. В этом случае с помощьюfseek() или жеrewind() чтобы получить начало файла после записи, имеет смысл, и в качестве побочного эффекта он очистит буфер. Но я хочу знать, что произойдет, если мы обновляем / перезаписываем первую часть уже существующий файл с новыми данными, но как только мы это сделаем, мы хотимнемедленно начните читать оставшиеся старые данные с этой точки? Нужно ли использовать что-то вродеfseek(pFile,0,SEEK_CUR) так что мы очищаем буфер дляwrite-read переход, и в то же время, неизменить положение указателя файла? Такая же путаница возникает и со вторым сценарием, когда мы хотим прочитать первую половину файла, исразу после этого хочу начать писать там. Пожалуйста, ответьте на это.

2) Вторая часть оreading operation which did not reach the end-of-file кажется, подразумевает, что если операция чтения достигает конца файла, и мы намереваемся записать после этого, мы недля этого не нужно очищать буферread-write переход. Можете ли вы подтвердить, чтоЧто это значит? Толькоwrite-read переход нуждается в промывке, а неread-write переход, особенно если чтение достигло конца файла?

 Thokchom23 мая 2013 г., 05:49
@ bikram990 Это было близко. Но это все еще неT ответить на такие вопросы, как лиfseek(pFile,0,SEEK_CUR) это решение, между прочим.
 bikram99023 мая 2013 г., 05:18
 bikram99023 мая 2013 г., 08:18
Я добавил практический вопрос сfseek(pFile,0,SEEK_CUR)

Ответы на вопрос(1)

то есть, если мы достигнем EOF, а затем мы намереваемся написать его хорошо, это так же, какfseek кSEEK_END

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

пример: скажем, файл test.txt содержит данныеhello world Вы хотите обновитьhello текст к другому тексту сказатьshare поэтому, по вашему мнению, текст должен бытьshare world, Следовательно, длина такая же, вы получите точный результат, но как насчет заменыhello сbye или жеsomeother текст, то вы либо получите мусорные данные или нет данных (если заменить строку слишком длинная)

Ваш ответ на вопрос