Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Как сделать чтобы FindFirst и FindNext искали в папке Temporary I   Найти похожие ветки 

 
RoLeX2004   (2004-09-18 15:38) [0]

У меня программа ищет файлы с маской *.* в папке Temporary Internet Files и найденные файлы добавляет в ListBox.
Но в результате она там ничего не находит.
А если подставить вместо Temporary Internet Files другую папку (обычную), то она выводит все файлы, т.е. в обычных папках всё нормально.
В чём проблема?


 
[lamer]Barmaglot ©   (2004-09-18 15:49) [1]

Проблема в этой папке, имена там, насколько я помню, имеют ссылку на CLSID... Поэтому лучше забей на это, либо см. здесь: http://www.delphimaster.ru/articles/shell.html


 
RoLeX2004   (2004-09-18 15:55) [2]

И не только в этой папке, ещё и в History, C:\WINDOWS\Offline Web Pages, C:\WINDOWS\Downloaded Program Files...


 
[lamer]Barmaglot ©   (2004-09-18 15:58) [3]

Поясняю, имена этих папок храняться в реестре... Твоя программа должна уметь их оттуда выценить, сходи по линку который я тебе дал, там приведен пример поисковой программы...


 
RoLeX2004   (2004-09-18 17:38) [4]

Ну всё-таки я не понял ничего. Как получит список файлов из Temporary Internet Files?


 
RoLeX2004   (2004-09-18 19:16) [5]

Вот мне дали, но я не въехал:
procedure FindFilesByMask(List :tStrings; var DirCount :Integer; const DirName, Mask :String; SubDir: Boolean = True);
// Поиск файлов по маске в заданной папке и подпапке
//var
//  num: Integer;
 // Чем меньше параметров и локальных переменных у рекурсивной процедуры,
 // тем меньше она требует памяти под стек. Поэтому использую локальную
 // процедуру
 procedure ScanDirs(const DirName :String);
 var
   h   :tHandle;
   wfd :tWin32FindData;
 begin
   Inc(DirCount); // просто для статистики
   // Сначала просмотрим текущий каталог по заданной маске
   h := Windows.FindFirstFile(PChar(DirName+Mask), wfd);
   try
     if  h <> INVALID_HANDLE_VALUE  then begin
       repeat
         if  (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0  then
           List.Add(DirName+wfd.cFileName);
       until  not Windows.FindNextFile(h,wfd);
     end;
     // проверка кода ошибки и FindFirstFile и FindNextFile
     case  GetLastError  of
       ERROR_NO_MORE_FILES,    // больше нет файлов и каталогов удовлетворяющих маске (но были)
       ERROR_FILE_NOT_FOUND,   // вообще нет файлов и каталогов удовлетворяющих маске
       ERROR_SHARING_VIOLATION // возникает во время создания каталога (уже создан но еще недоступен)
                             : ; // ничего не делаем, все Ok
       else // все остальные ошибки
         raise Exception.CreateFmt("Ошибка просмотра каталога "%s": %s",[DirName,SysErrorMessage(GetLastError)]);
     end;
   finally
     if  h <> INVALID_HANDLE_VALUE  then Windows.FindClose(h);
   end;

   // Теперь рекрсивно просмотрим подкаталоги
   if not SubDir then exit; // 13.06.03
   h := Windows.FindFirstFile(PChar(DirName+"*.*"), wfd);
   try
     if  h <> INVALID_HANDLE_VALUE  then begin
       repeat
         if   ((wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0)
          and (wfd.cFileName <> String("."))
          and (wfd.cFileName <> "..")           then
           ScanDirs(IncludeTrailingPathDelimiter(DirName+wfd.cFileName));
       until  not Windows.FindNextFile(h,wfd);
     end;
     // проверка кода ошибки и FindFirstFile и FindNextFile
     case  GetLastError  of
       ERROR_NO_MORE_FILES,    // больше нет файлов и каталогов удовлетворяющих маске (но были)
       ERROR_FILE_NOT_FOUND,   // вообще нет файлов и каталогов удовлетворяющих маске
       ERROR_SHARING_VIOLATION // возникает во время создания каталога (уже создан но еще недоступен)
                             : ; // ничего не делаем, все Ok
       else // все остальные ошибки
         raise Exception.CreateFmt("Ошибка просмотра каталога "%s": %s",[DirName,SysErrorMessage(GetLastError)]);
     end;
   finally
     if  h <> INVALID_HANDLE_VALUE  then Windows.FindClose(h);
   end;
 end;

begin // FindFilesByMask
 ScanDirs(IncludeTrailingPathDelimiter(DirName));
end;


 
begin...end ©   (2004-09-18 20:01) [6]

Тебе ж статью посоветовали. Читать - влом, конечно?

Можно попробовать так (за правильность не ручаюсь):

function GetInternetTempPath: String;
var
 Path: array [0..MAX_PATH] of Char;
 PIDL: pItemIDList;
begin
 Result := "";
 SHGetSpecialFolderLocation(0, CSIDL_INTERNET_CACHE, PIDL);
 if SHGetPathFromIDList(PIDL, Path) then
   Result := String(Path);
end;


 
begin...end ©   (2004-09-18 20:04) [7]

Да, uses ShlObj не забудь.


 
DiamondShark ©   (2004-09-18 20:18) [8]

Вообще-то, в папке Temporary Internet Files файлы есть. Вот только лежат они там не так, как показывает "Проводник".


 
Mim1 ©   (2004-09-19 09:41) [9]

Может ничего не находит потому что они помечены скрытыми? Покажите как вы делали.



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
3-1094457323
savik
2004-09-06 11:55
2004.10.03
DAC for MySQL v2.2.4. Глючит безбожно!


8-1089802421
ПЛОВ
2004-07-14 14:53
2004.10.03
RGBA


14-1094798237
PVOzerski
2004-09-10 10:37
2004.10.03
Есть ли sudo и альтернативные системы ввода пароля для NT?


3-1094191998
Chery
2004-09-03 10:13
2004.10.03
Как узнать в каком столбце сейчас находится курсор?


4-1093424519
Manfred7
2004-08-25 13:01
2004.10.03
Хук на клавиатуру клавиша Win