Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2015, 10:23   #1
wesker57
Александр
Пользователь
 
Аватар для wesker57
 
Регистрация: 06.04.2015
Сообщений: 32
Печаль Функция язык Си

Написать функцию, определяющую внутреннее расширение файла filename, хранящееся в первых трёх байтах файлов. Примеры внутренних расширений: %PDF-1.4 - файлы PDF, ?PNG- файлы png и тд. Вывести внутреннее расширение на экран и попытаться определить расширение файла. В случае его определения вывести тип файла на экран.

Подскажите пожалуйста как определить расширение файла и вывести тип файла, с чего начать и что использовать для построения кода
wesker57 вне форума Ответить с цитированием
Старый 20.04.2015, 11:06   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну прочитайте же вашу задачу и еще раз прочитайте. Там же все написано. Читаете у файла первые байты и смотрите, что это: "%PDF-1.4 - файлы PDF, ?PNG- файлы png и тд"
p51x вне форума Ответить с цитированием
Старый 18.06.2015, 19:27   #3
wesker57
Александр
Пользователь
 
Аватар для wesker57
 
Регистрация: 06.04.2015
Сообщений: 32
По умолчанию

читал, но всеравно не могу понять что делать с расширениями
как я понял нужно делать через fgetc , но тут же встает вопрос: fgetc проверяет только 1 байт а в задаче нужно проверить 3 байта, т.е нужно использовать 3 раза fgetc для каждого расширения?
wesker57 вне форума Ответить с цитированием
Старый 18.06.2015, 19:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://www.cplusplus.com/reference/cstdio/fgets/
Или три раза fgetc() если уж так хочется.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2015, 19:49   #5
wesker57
Александр
Пользователь
 
Аватар для wesker57
 
Регистрация: 06.04.2015
Сообщений: 32
По умолчанию

т.е примерно с условием если выполняется fgets и встречается внутреннее расширение, то выводится расширение?
wesker57 вне форума Ответить с цитированием
Старый 18.06.2015, 19:53   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Моя твоя не панимайтунг.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2015, 19:57   #7
wesker57
Александр
Пользователь
 
Аватар для wesker57
 
Регистрация: 06.04.2015
Сообщений: 32
По умолчанию

ну из условия задачи , например : встречается внутреннее расширение %PDF-1.4, значит выводим на экран PDF, только как это в коде реализовать не могу понять(
wesker57 вне форума Ответить с цитированием
Старый 18.06.2015, 19:59   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А пример по ссылке, что я дал совсем-совсем ни о чем не говорит тебе?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2015, 20:03   #9
wesker57
Александр
Пользователь
 
Аватар для wesker57
 
Регистрация: 06.04.2015
Сообщений: 32
По умолчанию

ну там понятно что в if ( fgets (mystring , 100 , pFile) != NULL ) читает 100 символов из файла и помещает в массив, но не понимаю что делать с расширениями(

допустим както так:
Код:
#include <stdio.h>

int main()
{
   FILE * f;
   char a [3];

   f = fopen ("myfile.txt" , "r");
   if (f == NULL) perror ("Error opening file");
   else {
     if ( fgets (a , 3 , f) != NULL )
       puts (a);
     fclose (f);
   }
   return 0;
}
но всеравно не понимаю, как определять внутреннее расширение в байтах

Последний раз редактировалось Stilet; 18.06.2015 в 20:12.
wesker57 вне форума Ответить с цитированием
Старый 18.06.2015, 20:11   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Читаете у файла первые байты и смотрите, что это: "%PDF-1.4 - файлы PDF, ?PNG- файлы png и тд"
Цитирую коллегу.
Особое внимание обрати на подчеркнутое в тексте.
Потом считанное сравниваешь. Скажем считал ты 10 байт, а потом функцией strncmp() делаешь сравнение с константной строкой, которая содержит сигнатуру, указывающую на то что это за файл.
Код:
char s[20];
 fgets(&s,20,файл);
 if(!strncmp(&s,"JFIF",4)) Это файл JPEG; else
 if(!strncmp(&s,"%PDF-1.4",8)) Это файл PDF версии 1,4; else
 ... И так далее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция строительства двоичного дерева.Язык Си. East Undia Trading Помощь студентам 3 10.05.2014 23:47
Язык Си. Конвертирующая функция. Землянин Помощь студентам 0 03.05.2012 18:51
Функция. Язык С Bella Помощь студентам 0 27.11.2009 21:39
Юниксовая функция tar - разгранеченители. [язык: Си] Card1nal Помощь студентам 0 21.11.2009 14:23
Функция (язык Си) Darh Помощь студентам 5 20.11.2009 14:25