Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/30: Рейтинг темы: голосов - 30, средняя оценка - 4.83
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
1

Как получить расширение файла?

27.02.2012, 22:26. Просмотров 5516. Ответов 13
Метки нет (Все метки)

Программа преобразует монохромные картинки в текстовые матрицы. решил добавить поддержку jpg. Но для него требуется выполнить специальное преобразование в Битмап (которого для bmp не надо). Необходимо сделать условие, если файл jpg, то выполнять преобразование, если нет - не надо. Подскажите, как мне вытащить расширение файла из имени и потом построить условие?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2012, 22:26
Ответы с готовыми решениями:

Нужно как то различать когда есть расширение в имени файла а когда нет. Как?
Когда пользователь сохраняет файл, ему нужно ввести имя файла(обычно...

Временно изменить расширение файла
Всем привет! Не подскажите как программно изменить расширение файла?...

Как получить путь файла
Привет всем!! Кто знает как замутить такую штуку... Есть какой нибудь левый...

Как получить md5 из файла
Взял исходник здесь Но при компиляции выдает 3 ошибки: Что не понравилось ?

Как получить полное имя файла
Здравствуйте! У меня на форме TSaveDialog, вот я сохранил текст с TMemo...

13
Sergey-K
235 / 226 / 58
Регистрация: 27.10.2011
Сообщений: 249
27.02.2012, 22:36 2
C++
1
  if(AnsiLowerCase(ExtractFileExt(Name)) == ".jpg")
2
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
27.02.2012, 22:43  [ТС] 3
Хм, а можете чуть подробней описать..
Я гружу файл в TImage. В любом случае, jpg-шник это, или нет
C++
1
Source->Picture->LoadFromFile("c:\\13.bmp");
К примеру.
А дальше - мне нужно написать Вашу функцию, так?
И вместо Name поставить имя файла..
Но если имя его я потом тоже буду выбирать
C++
1
2
3
4
 if (OpenDialog1->Execute())
 {
 Image1->Picture->LoadFromFile(OpenDialog1->FileName);
 }
Как здесь поступить?
0
Sergey-K
235 / 226 / 58
Регистрация: 27.10.2011
Сообщений: 249
27.02.2012, 22:49 4
C++
1
2
3
  if(OpenDialog1->Execute())
    if(AnsiLowerCase(ExtractFileExt(OpenDialog1->FileName)) == ".jpg")
      Image1->Picture->LoadFromFile(OpenDialog1->FileName);
1
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
27.02.2012, 22:52  [ТС] 5
Sergey-K, Хех, сколько непонятных мне пока еще функций..)
Спасибо большое. Буду пробовать.
0
LK
Заблокирован
28.02.2012, 00:04 6
Функция ExtractFileExt извлекает из полного имени файла расширение файла.
AnsiLowerCase() - переводит строку в нижний регистр.
LoadFromFile() - загружает что-нибудь из файла на диске.
1
nick42
Практикантроп
4272 / 2295 / 394
Регистрация: 23.09.2011
Сообщений: 4,908
28.02.2012, 00:26 7
Eugene THE BEST,и в Вашем случае резоннее использовать OpenPictureDialog вместо OpenDialog. Еще можно файлы грузить в память и уже там анализировать: в первых же байтах файла можете получить признак формата в символьном виде (JFIF для *.jpg, ну и т.д.).
2
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
28.02.2012, 22:55  [ТС] 8
nick42, Cпасибо за подсказку, действительно, так лучше.
А на счет второго. Какие преимущества дает этот способ перед тем, что хотел сделать я? Просто действительно не совсем понимаю..
0
nick42
Практикантроп
4272 / 2295 / 394
Регистрация: 23.09.2011
Сообщений: 4,908
28.02.2012, 23:03 9
- ну, Вы же все равно загружаете файлы для обработки. Переименовать файл - не проблема (поменять расширение). К тому же он может быть "случайно" битый, то-есть совсем другой структуры. А так - какая-никакая гарантия, что загружен действительно jpg, а не что-то другое.
0
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
29.02.2012, 07:05  [ТС] 10
А, ну да, если только в качестве перестраховки. А не подскажете, что для этого необходимо сделать?
0
Sergey-K
235 / 226 / 58
Регистрация: 27.10.2011
Сообщений: 249
29.02.2012, 15:41 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TFileStream *stream = new TFileStream("D:\\Test.jpg", fmOpenRead);
  if(stream != NULL)
    {
      stream->Position = 6;
      char str[4];
      stream->Read(str, 4);
      if(AnsiString(str).SetLength(4) == "JFIF")
        ShowMessage("Это действительно jpg!");
      else
        ShowMessage("Это не jpg!");
    }
  delete stream;
}
1
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
29.02.2012, 19:14  [ТС] 12
Спасибо большое.
Если я прав, то для .bmp читать надо с первого символа, так?
0
Sergey-K
235 / 226 / 58
Регистрация: 27.10.2011
Сообщений: 249
29.02.2012, 20:18 13
Верно. *.bmp нужно читать сначала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TFileStream *stream = new TFileStream("D:\\Test.bmp", fmOpenRead);
  if(stream != NULL)
    {
      char str[2];
      stream->Read(str, 2);
      if(AnsiString(str).SetLength(2) == "BM")
        ShowMessage("Это действительно bmp!");
      else
        ShowMessage("Это не bmp!");
    }
  delete stream;
}
1
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
29.02.2012, 21:01  [ТС] 14
Ну все, вроде разобрался теперь.
спасибо еще раз Вам огромнейшее.
0
29.02.2012, 21:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2012, 21:01

Как получить обложку альбома из mp3 файла ?
Пишу медияплеер, не как не могу понять как мне ее получить, не хотелось бы...

Как получить структуру файла bmp в классе TBitmap?
Открытие файла через стандартный диалог: OpenDialog1->Execute() Изображение...

Как из wav файла получить читаемый txt, а потом обратно
Извиняюсь если не совсем по адресу, но я уверен что местные читатели знают как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru