![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() И так, продолжаю список статей, "курсовую сдавать через три дня, а все работает криво и не так как надо, или не работает вообще" )
Столкнулся с еще одной проблемой при написании своего "Антивируса". Для построения списка папок я использую 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 который и отлавливает вылетающие ошибки при попытке взять хеш от папки. |