И так, продолжаю список статей, "курсовую сдавать через три дня, а все работает криво и не так как надо, или не работает вообще" )
Столкнулся с еще одной проблемой при написании своего "Антивируса". Для построения списка папок я использую FindFirst, FindNext ... Но вот почему-то некоторые папки он причисляет к файлам, такие как C:\ProgramFiles, C:\Users и т.д., т.е. скрытые или системные папки попадают в список файлов, мой алгоритм пытается взять их хеш-сумму и естественно выдает ошибку.
Возникает вопрос, можно ли заставить FindFirst ... заставить найти абсолютно ВСЕ папки, какие бы круто скрытые или системные они ни были, или существует ли альтернативный подход, который решил бы данную проблему.
Алгоритм, который работает (почти) в данный момент:
Код:
found := FindFirst(startPoint+'\*',faAnyFile,foundFolders);
if (found = 0) Then begin
while (found = 0) do begin
if ((foundFolders.Name <> '.') and (foundFolders.Name <> '..')) Then begin
if (foundFolders.Attr and faDirectory) = faDirectory Then Begin
Application.ProcessMessages;
currentPath := startPoint + '\' + foundFolders.Name;
setLength(allFolders,Length(allFolders)+1);
allFolders[Length(allFolders)-1]:=currentPath;
sGetFoldersListFromStartPoint(currentPath);
end;
end;
found := FindNext(foundFolders);
end;
findClose(found);
end;
где
found - состояние функции
foundFolders- запись TSearchRec
allFolders - массив с папками
Как видно, я пытаюсь отсеять все и оставить только папки, но сюда не пролезают такие папки как c:\program files и т.д., напротив, эти папки пролезают в алгоритм, который должен оставить только файлы и затем взять их хеш-сумму, благо поставил try-except который и отлавливает вылетающие ошибки при попытке взять хеш от папки.