Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

Как сделать чтобы 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.033 c
1-1095737501
hooch
2004-09-21 07:31
2004.10.03
Перенаправление событий мыши


1-1095631439
TechnoDreamer
2004-09-20 02:03
2004.10.03
Как скопировать текст из RichEdit в RichEdit?


3-1094573355
tytus
2004-09-07 20:09
2004.10.03
DBGRID


4-1093807352
romario
2004-08-29 23:22
2004.10.03
Отладка DLL проекта


1-1095522098
appendix
2004-09-18 19:41
2004.10.03
saveDialog OpenDialog





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский