Текущий архив: 2007.07.22;
Скачать: CL | DM;
Вниз
TSearchRec Найти похожие ветки
← →
harisma (2007-06-22 17:17) [0]Как мне задать условие поиска только не ReadOnly файлов. Почему-то указание аттрибута faAnyFile and not faReadOnly для функции FindFirst не срабатывает.
← →
Dimaxx © (2007-06-23 03:18) [1]Надо (Attr and faReadOnly)<>faReadOnly.
← →
palva © (2007-06-23 09:16) [2]> Почему-то указание аттрибута faAnyFile and not faReadOnly для функции FindFirst не срабатывает.
Странно, должно срабатывать. Может быть в чем-то другом ошибка?
← →
Anatoly Podgoretsky © (2007-06-23 12:23) [3]> harisma (22.06.2007 17:17:00) [0]
Ошибка в 17 строке
← →
Anatoly Podgoretsky © (2007-06-23 12:24) [4]> Dimaxx (23.06.2007 03:18:01) [1]
Ты не понял вопроса или не понимаешь как работает ДОС и его наследники и Паскаль
← →
Инс © (2007-06-23 15:28) [5]Такой код действительно не работатет.
procedure TForm1.Button1Click(Sender: TObject);
var
Rec: TSearchRec;
begin
if FindFirst("C:\*.*",faAnyFile and (not faReadOnly),Rec) = 0 then begin
try
repeat
ListBox1.AddItem(Rec.Name,nil);
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;
end;
Похоже, что это баг. Смотрим вместе:function FindFirst(const Path: string; Attr: Integer;
var F: TSearchRec): Integer;
const
faSpecial = faHidden or faSysFile or faVolumeID or faDirectory;
{$IFDEF MSWINDOWS}
begin
// Что означает следующая строчка? Следовало бы сделать так:
// F.ExcludeAttr := not Attr; Иначе атрибуты, не входящие в faSpecial
// никогда не попадут в список исключаемых
F.ExcludeAttr := not Attr and faSpecial;
F.FindHandle := FindFirstFile(PChar(Path), F.FindData);
if F.FindHandle <> INVALID_HANDLE_VALUE then
begin
Result := FindMatchingFile(F);
if Result <> 0 then FindClose(F);
end else
Result := GetLastError;
end;
← →
Dimaxx © (2007-06-23 16:41) [6]
> Ты не понял вопроса или не понимаешь как работает ДОС и
> его наследники и Паскаль
А по одной строке не понять что именно автор хотел спросить. Какой вопрос - такой ответ... :)
← →
harisma (2007-06-25 14:19) [7]
> Ошибка в 17 строке
Что Вы имели ввиду? Что это за 17 строка?
← →
Dimaxx © (2007-06-25 14:35) [8]Это стандартный ответ, когда не видя код нельзя со 100% уверенностью сказать где ошибка. Приведи код - посмотрим...
← →
harisma (2007-06-25 14:55) [9]Ясно. Тогда вот фрагмент кода:
for i := 0 to Length(LMasks) - 1 do
if (FindFirst(LDIR + LMasks[i], AAttr and (not faDirectory), LSR) = 0) then
try
repeat
AEnumPathFunc(LDIR, LSR, AAdditionalInfo);
until not (FindNext(LSR) = 0);
finally
FindClose(LSR);
end;
где:
LMasks - стринговый массив масок файлов. Возьмем для простоты из одного элемента ("*.*")
LDIR - корневая директория
LSR - TSearchRec
AAttr = мой набор аттрибутов файлов, которые надо найти (faAnyFile and not faReadOnly) (передается извне)
AEnumPathFunc - некоторая функция, выполняющая сохранение имен найденых файлов в моей структуре.
← →
Anatoly Podgoretsky © (2007-06-25 14:57) [10]Об остальном мы должны сами догадаться
← →
harisma (2007-06-25 15:14) [11]А что же тут еще не ясного в этом фрагменте кода? Все переменные я описал. Параметры класс функции не существенны, так как поиск файла ведется через FindFirst, FindNext - то есть стандартным методом. Вот только накладываемый мною фильтр на атрибуты искомых файлов почему-то не работает.
← →
clickmaker © (2007-06-25 15:18) [12]
> [11] harisma (25.06.07 15:14)
hFind := FindFirstFile(LDIR + LMasks[i], wfd);
if (hFind <> INVALID_HANDLE_VALUE) then begin
repeat
if ((wfd.dwFileAttributes and FILE_ATTRIBUTE_READONLY) = 0) then
// наш файл
until not FindNextFile(hFind, wfd);
end;
← →
Anatoly Podgoretsky © (2007-06-25 15:31) [13]А значения мы должны сами придумывать.
← →
Desdechado © (2007-06-25 15:56) [14]> Похоже, что это баг. Смотрим вместе:
В D7 все корректно:F.ExcludeAttr := not Attr and faSpecial;
← →
harisma (2007-06-25 16:09) [15]> [13] Anatoly Podgoretsky (25.06.07 15:31)
А какая разница, какие значения передаются, кроме значения аттрибутов? Подставьте любую корневую директорию, например С:\WinNT\system32 и задайте маску *.*.
> [14] Desdechado (25.06.07 15:56)
В D5 код такой-же, однако находит все файлы подряд, включая и имеющие аттрибут ReadOnly, а вот именно они то мне и не нужны.
← →
Anatoly Podgoretsky © (2007-06-25 16:35) [16]> harisma (25.06.2007 16:09:15) [15]
> А какая разница, какие значения передаются, кроме значения аттрибутов? Подставьте любую корневую директорию, например С:\WinNT\system32 и задайте маску *.*.
Вот сразу и получили ошибку, попробуй сделать заявленую у тебя конкатенацию.
← →
harisma (2007-06-25 16:44) [17]> Вот сразу и получили ошибку, попробуй сделать заявленую у тебя конкатенацию.
Ответ не в тему. Я знаю, что корневая директория должна заканчиваться символом "\". Проблема в том, что я не могу отфильтровать не ReadOnly файлы стандартными методами, а вы мне всякую ерунду про параметры и их значения толкуете.
← →
clickmaker © (2007-06-25 16:58) [18]
> [17] harisma (25.06.07 16:44)
давно бы уже сделал как в [12]
непродуктивный базар
← →
Anatoly Podgoretsky © (2007-06-25 17:04) [19]> harisma (25.06.2007 16:44:17) [17]
А нам прикажешь догадываться?
Не тема а базар, ничего предметного.
Страницы: 1 вся ветка
Текущий архив: 2007.07.22;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.017 c