Это не только для компакта так будет. Сделай на жёстком диске системный, или скрытый, или read-only каталог и попробуй с ним первый вариант - он точно так же скажет, что это файл

Дело в том, что каждый атрибут - это отдельный бит в слове атрибутов, и каталог - только один из них. Так что даже пример
Код:
if(sr.Attr ==0х010||sr.Attr ==0х011){
в общем случае будет работать неправильно, т.к. он не учитывает возможность наличия, скажем, систенмых каталогов. Последний вариант
Код:
if (sr.Attr & faDirectory) {
наиболее корректен и работает во всех случаях.