Конференция "KOL" » Работа с ассоциациями файлов
 
  • MTsv DN (31.07.09 10:04) [0]
    Всем привет...

    Нашел один очень интересный момент. Естесссна про FileIconSystemIdx и FileIconSysIdxOffline я знаю, однако при открытии каталога с большим числом файлов производительность падает. Поэтому я стал использовать двусвязный список Extension <-> IconIdx. Что позволяет при работе программы сильно выиграть по времени. Но и тут меня не все устоило, поскольку при каждом запуске программы приходится сканировать реестр по расширению и заполнять список. Здесь я решил, только один раз (самый первый запуск) получать необходимые данные и сохранять их в файл и при последующих запусках просто читать данные из файла.
    Это предистория, однако появились очень интересные грабли:
     S := NewReadFileStream('files_assocs.bin');
     ass := S.ReadStr;
     while ass <> '' do
      begin
       Ext := KOLString(Parse(ass, '|'));
       Ic_Ext.Add({$IFDEF UNICODE_CTRLS}WAnsiLowerCase{$ELSE}AnsiLowerCase{$ENDIF}(Ext));
       Ic_Idx.Add(KOLString(ass));
       FileIconSysIdxOffline(Ext);
       ass := S.ReadStr;
      end;
     S.Free;


    Если выделенную строчку закомментировать, то иконки файлов не отображаются!!! Хотя в принципе этот вызов - "пустышка"!!!

    Почему так выходит?

    Полный проект здесь: http://slil.ru/27872306
    P.S. Для тестов изменить путь. У меня "D:\1\"
  • Vladimir Kladov © (31.07.09 20:38) [1]
    Это скорее всего потому, что системный список иконок - это кэш, и он динамический. В нем не появляются иконки сами собой, требуется, чтобы какая-то программа (например, explorer) затребовала соответствующие ассоциации. Если не затребовать, то по этим позициям ничего не будет.
 
Конференция "KOL" » Работа с ассоциациями файлов
Есть новые Нет новых   [134465   +2][b:0][p:0.001]