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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2009, 23:50   #1
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию Проверка расширений файлов

Всем привет. Вот у меня такая проблема:
получаю я список файлов и папок в любом каталоге, вывожу этот список в ListView. Теперь мене надо запустить любой файл - это все я делаю при помощи ShellExecute(). Когда расширение файла нормально (известно оно системе), то все запускается - это есть хорошо. А вот как мене проверить: если расширение файла не известно, то выдать например сообщение ShowMessage('Error');

Пробовал воспользоваться функцией ExtractFileExt, которая возвращает расширение файла, но тогда с чем сравнивать это полученно расширение? Кто знает, подскажите.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 20.07.2009, 00:06   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Просмотрите ветку HKEY_CLASSES_ROOT в реестре.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 20.07.2009, 00:21   #3
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Я вот в этой ветке реестра нашел просто список расширений(не знаю всех или не всех). А как мне тогда сравнивать мое расширение с этими расширениями из реестра ??? В ручную создавать список всех этих расширений?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 20.07.2009, 00:52   #4
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Зачем, вот вам примеры:

Этот код выводит в ListBox все ключи из HKEY_CLASSES_ROOT:
Код:
procedure TForm1.bt_1Click(Sender: TObject);
var
 reg: TRegIniFile;
 i: integer;
begin
 reg := TRegIniFile.Create;
 try
  reg.RootKey := HKEY_CLASSES_ROOT;
  reg.OpenKey('', false);
  lbox_1.Items.BeginUpdate;
  reg.ReadSections(lbox_1.Items);
  lbox_1.Items.EndUpdate;
 finally
  reg.Free;
 end;
end;
Вот код, который заносит в listbox только расширения:
Код:
procedure TForm1.bt_2Click(Sender: TObject);
var
 reg: TRegIniFile;
 i: integer;
begin
 reg := TRegIniFile.Create;
 try
  reg.RootKey := HKEY_CLASSES_ROOT;
  reg.OpenKey('', false);

  lbox_1.Items.BeginUpdate;

  reg.ReadSections(lbox_1.Items);
  i := 0;
  while i <> lbox_1.Items.Count do
  begin
   if lbox_1.Items[i][1] <> '.' then
    lbox_1.Items.Delete(i)
   else
    inc(i);
  end;

  lbox_1.Items.EndUpdate;
 finally
  reg.Free;
 end;
end;
lbox_1 - ListBox

Цитата:
не знаю всех или не всех
Всех.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 20.07.2009 в 00:55.
Neeter вне форума Ответить с цитированием
Старый 20.07.2009, 01:25   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Neeter спасибо. А вот меня интересует еще такой вопрос, например выбрал я в своем ListView некий файл для запуска (например с расширением DLL или wdb или другой какой то файл с известным системе расширением, но который предназначен не для запуска пользователем), как мене проверить эту ситуацию и выдать соответствующее сообщение, что например файл нельзя запустить ?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 20.07.2009, 01:45   #6
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Я снова покажу с listbox'ом, я думаю, вам не составит труда переделать это к listview.

Код:
procedure TForm1.bt_3Click(Sender: TObject);
var
 i: integer;
 reg: TRegIniFile;
 sec: TStrings;
begin
 reg := TRegIniFile.Create;
 try
  sec := TStringList.Create;
  reg.RootKey := HKEY_CLASSES_ROOT;
  reg.OpenKey('', false);
  reg.ReadSections(sec);
  for i := 0 to sec.Count - 1 do
   if (sec[i][1] <> '.') and (sec[i] <> '*') then
   begin
    ShowMessage('Данного расширения не существует');
    Break;
   end
   else if sec[i] = ExtractFileExt(lbox_2.Items[lbox_2.ItemIndex]) then  //Здесь замените на имя файла или путь к файлу из listview
   begin
    ShowMessage('Данное расширение существует');
    Break;
   end;
 finally
  reg.Free;
  if sec <> nil then sec.Free;
 end;
end;
В listbox'е использовались данные строки:
Код:
filename.txt
ffff.dll
ffsas.ljjdf
На первых двух выдает сообщение что найдено расширение, на последней выдает что не найдено.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 20.07.2009 в 01:52.
Neeter вне форума Ответить с цитированием
Старый 20.07.2009, 02:02   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Neeter спасибо, суть я понял.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа получения списка файлов директории и изменения атрибутов файлов roma86 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 09.06.2009 09:08
Проверка закачиваемых файлов по дате обновления Evgen1976 Работа с сетью в Delphi 2 19.03.2009 13:02
Проверка целостности файлов trech85 Общие вопросы Delphi 1 28.11.2008 19:08
Нужна помощь: выбор файлов исходя из имени файлов Antik163RUS Помощь студентам 4 19.06.2008 21:20
Проверка размера файлов на стороне клиента (работа) AndreyAndrey Фриланс 5 02.11.2007 19:13