Форум: "Основная";
Текущий архив: 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.042 c