Указатели позиции в файле
Когда файл открывается, Windows связывает указатель позиции в файле с заданным по умолчанию потоком. Этот указатель позиции в файле - 64-разрядное значение смещения, определяющее следующий байт, который читается или место, которое получит следующий записываемый байт. Каждый раз, когда файл открывается, система размещает указатель позиции в файле в его начале, который является нулевым смещением. Каждая операция чтения и записи продвигают указатель позиции в файле на число байтов, прочитанных и записанных. Например, если указатель позиции в файле - в начале файла, а операции чтения потребовалось 5 байтов, указатель позиции в файле должен расположиться со смещением 5 немедленно после операции чтения. Поскольку каждый байт читается или пишется, система продвигает указатель позиции в файле. Указатель позиции в файле может также быть возвращен обратно при помощи вызова функции SetFilePointer.
Когда указатель позиции в файле достигает его конца, а приложение пытается читать из файла, ошибка не происходит, но никакие байты не читаются. Поэтому, чтение нулевых байтов без ошибки означает, что приложение достигло конца файла. Запись нулевых байтов ничего не делает.
Приложение может обрезать или продлить файл, используя функцию SetEndOfFile. Эта функция устанавливает конец файла в текущей позиции указателя позиции в файле.