Показать сообщение отдельно
  #1  
Старый 11.06.2012, 21:15
PRStudio PRStudio вне форума
Прохожий
 
Регистрация: 18.02.2012
Сообщения: 13
Репутация: 143
По умолчанию Получить список всех папок, включая системные, скрытые и т.д.

И так, продолжаю список статей, "курсовую сдавать через три дня, а все работает криво и не так как надо, или не работает вообще" )

Столкнулся с еще одной проблемой при написании своего "Антивируса". Для построения списка папок я использую 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 который и отлавливает вылетающие ошибки при попытке взять хеш от папки.
Ответить с цитированием