
- •Урок 1: Создание среды программирования, глава 1
- •Урок 1: Создание среды программирования, глава 2
- •Урок 1: Создание среды программирования, глава 3
- •Урок 1: Создание среды программирования, глава 4
- •Урок 1: Создание среды программирования, глава 5
- •Урок 2: Создание первой собственной программы, глава 1
- •Урок 2: Создание первой собственной программы, глава 2
- •Урок 2: Создание первой собственной программы, глава 3
- •Урок 3: Шпаргалки для начинающих программистов, глава 1
- •Урок 3: Шпаргалки для начинающих программистов, глава 2
- •Урок 3: Шпаргалки для начинающих программистов, глава 3
- •Урок 4: Простейшие способы обработки изображений, глава 1
- •Урок 4: Простейшие способы обработки изображений, глава 2
- •Урок 4: Простейшие способы обработки изображений, глава 3
- •Урок 4: Простейшие способы обработки изображений, глава 4
- •Урок 4: Простейшие способы обработки изображений, глава 5
- •Урок 5: Новые методы программирования на psp, глава 1
- •Урок 5: Новые методы программирования на psp, глава 2
- •Урок 5: Новые методы программирования на psp, глава 3
- •Урок 5: Новые методы программирования на psp, глава 4
- •Урок 5: Новые методы программирования на psp, глава 5
- •Урок 6: Добавление звука в программу, глава 1
- •Урок 6: Добавление звука в программу, глава 2
- •Урок 6: Добавление звука в программу, глава 3
- •Считывание всего файла, глава 1
- •Считывание всего файла, глава 2
- •Считывание всего файла, глава 3
- •Считывание всего файла, глава 4
- •Считывание всего файла, глава 5
Считывание всего файла, глава 3
Третья часть учебных материалов, размещенных harleyg на форуме PSP-Programming.com (первоначально опубликованные под заголовком «Общий C код»).
Теперь, когда мы завершили программу, мы проверим размер файла:
fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); rewind (pFile);
fseek — «устанавливает индикатор текущей позиции в файле для потока, указанного параметром stream. Наверно, вы догадались, что данная функция «ищет» позицию файла. Fseek имеет три аргумента: указатель на открытый файл, смещение (количество байтов относительно начала файла) и источник (или конец). ( … ) — в круглые скобки включают аргументы. pFile – переменная, которая содержит указатель на файл, открытый нами ранее. 0 – смещение Ноль означает, что мы хотим начать запуск с начала. SEEK_END — отчитываем позицию до конца файла. lSize = ftell (pFile); — сохраняем возвращаемое значение ftell() в lSize. ftell(pFile); — возвращает текущую позицию потока (stream). ftell имеет только один аргумент: указатель на открытый файл. В этом случае это pFile. Основная функция ftell – сообщить вам о количестве байтов относительно конкретной позиции. Поскольку мы находимся в конце (считываем до конца с fseek), то нам сообщается размер файла. rewind (pFile); — функция перемотки заново открывает файл с начала. Она имеет только один аргумент, указатель на начало файла. Таким образом, файл запущен для повторного использования.
Итак, подведем итог проделанной работы: открываем файл, ищем конец, определяем количество байтов относительно начала. Например, если бы файл весил 10 байтов, то мы дошли до конца и обратно рассчитали бы до начала путь в 10 байтов. И в заключении, помещаем это значение в переменную lSize.
Далее выделяем необходимое количество памяти для соответствующего файла:
buffer = (char*) malloc (lSize); if (buffer == NULL) sceKernelExitGame();
buffer = — устанавливаем значение переменной, равное «buffer.« char * — вызывает malloc для сообщения о том, что содержит символы. malloc — функция для выделения памяти (например, malloc(56); предоставит вам 56 байтов памяти для хранения информации). Поэтому malloc (lSize) выделяет место полностью для всего файла. sceKernelExitGame() — Об этом я уже упоминал ранее: необходимо для проверки свободного места в файле.
Итак, мы успешно открыли файл, проверили его размер и выделили необходимое количество памяти. Далее копируем содержимое файла в буфер обмена (память):
fread(buffer, 1, lSize, pFile);
fread — «Считывание блока данных из файла в буфер обмена». Данная функция имеет 4 аргумента: buffer — первый аргумент, который называют «buffer» (буфер). Это место, где мы храним информацию. 1 — второй аргумент. Это размер («size«) в байтах, каждый из которых будет считываться. Для символов с длиной 1 байт используем «1». lSize — третий аргумент, «количество». То есть количество символов, подлежащие считыванию в буфере. В нашем случае lSize – размер файла. pFile — четвертый и последний аргумент, «поток». То есть указатель на открытие файла, у нас – pFile.
Отлично, только что мы прочитали файл в память. У нас есть строка файла в нашей переменной «buffer«. Теперь мы должны закрыть файл, так как больше он нам не понадобится. Если вы не сделаете этого, то могут возникнут проблемы, поэтому закрываем:
fclose(pFile);
fclose (pFile); — «сбрасывает любые буферы, сохраняемые для данного файла, и закрывает файл». Доступно объяснил, а?
Хорошо, мы закончили третью часть! Теперь переходим к четвертой.