﻿
<h1 class=p1>Перемещение по файлам</h1>
<br>
<br>

<p class=text>При чтении данных из файла указатель текущей позиции перемещается к очередному непрочитанному символу. Существует несколько функций, с помощью которых можно управлять положением этого указателя.</p>
<p class=text>Установка указателя текущей позиции в начало файла производится функцией <b>rewind</b>:</p>
<blockquote><pre>
  <em class=gr>int</em> <b>rewind</b> <em class=gr>( int</em> <b>file</b><em class=gr>)</em>
</pre></blockquote>
<p class=text>Аргумент <b>file</b> является дескриптором файла.</p>
<p class=text>Узнать текущее положение указателя можно при помощи функции <b>ftell</b>:</p>
<blockquote><pre>
  <em class=gr>int</em> <b>ftell</b> <em class=gr>( int</em> <b>file</b><em class=gr>)</em>
</pre></blockquote>
<p class=text>Установить указатель в любое место файла можно, используя функцию <b>fseek</b>:</p>
<blockquote><pre>
  <em class=gr>int</em> <b>fseek</b> <em class=gr>( int</em> <b>file</b>, <em class=gr>int</em> <b>offset</b> <em class=gr>[, int</em> <b>whence</b><em class=gr> ])</em>
</pre></blockquote>
<p class=text>Функция <b>fseek</b> устанавливает указатель файла на байт со смещением <b>offset</b> (от начала файла, от его конца или от текущей позиции, в <b>зависимости от значения параметра whence</b>). Аргумент <b>file</b> представляет собой дескриптор файла. Аргумент <b>whence</b> задает с какого места отсчитывается смещение <b>offset</b> и может принимать одно из следующих значений:</p>
<ul>
  <li><b>SEEK_SET</b> (отсчитывает позицию начала файла);</li>
  <li><b>SEEK_CUR</b> (отсчитывает позицию относительно текущего положения указателя);</li>
  <li><b>SEEK_END</b> (отсчитывает позицию относительно конца файла).</li>
</ul>
<p class=text>По умолчанию аргумент <b>whence</b> имеет значение SEEK_SET.</p>
<p class=text>Узнать, находится ли указатель в конце файла, можно с помощью функции <b>feof</b>:</p>
<blockquote><pre>
  <em class=gr>int</em> <b>feof</b> <em class=gr>( int</em> <b>file</b><em class=gr>)</em>
</pre></blockquote>
<p class=text>Если указатель находится в конце файла, функция возвращает <b>true</b>, в ином случае возвращается false.</p>
<p class=text>Функцию <b>feof</b> удобно использовать при чтении файла:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$file</b><em class=gr> =</em> <b>fopen</b> <em class=gr>(</em>"file.txt","r"<em class=gr>);
  if (</em><b>$file</b><em class=gr>)
  {
    while(</em>!<b>feof</b><em class=gr>(</em><b>$file</b><em class=gr>))
    {</em>
      <b>$str</b><em class=gr> =</em> <b>fgets</b><em class=gr>(</em><b>$file</b><em class=gr>);
      echo</em><b> $str</b><em class=gr>;
      echo (</em>"&lt;br&gt;"<em class=gr>);
    }</em>
    <b>fclose</b> <em class=gr>( </em><b>$file</b><em class=gr>);
  }
  else
  {
    echo(</em>"Ошибка открытия файла"<em class=gr>);
  }</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<p class=text>При помощи этой функции удобно также определять количество строк в файле:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$file</b><em class=gr> =</em> <b>fopen</b> <em class=gr>(</em>"file.txt","r"<em class=gr>);
  if (</em><b>$file</b><em class=gr>)
  {</em>
    <b>$counter</b><em class=gr> = </em>0<em class=gr>;
    while(!feof(</em><b>$file</b><em class=gr>))
    {</em>
      <b>$str</b><em class=gr> =</em> <b>fgets</b> <em class=gr>(</em><b>$file</b><em class=gr>);</em>
      <b>$counter</b>++<em class=gr>;
    }
    echo(</em><b>$counter</b><em class=gr>);</em>
    <b>fclose</b> (</em><b>$file</b><em class=gr>);
  }
  else
  {
    echo(</em>"Ошибка открытия файла"<em class=gr>);
  }</em>
<em class=red>?&gt;</em>
</pre></blockquote>
