- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
function myscandir($dir){
if(!file_exists($dir)){
return false;
}
$list = scandir($dir);
unset($list[0],$list[1]);
return array_values($list);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+145
function myscandir($dir){
if(!file_exists($dir)){
return false;
}
$list = scandir($dir);
unset($list[0],$list[1]);
return array_values($list);
}
bormand 31.10.2014 22:29 # +2
Вот кстати, всегда бесили эти . и .. Нахрена почти все либы для всех языков возвращают их?
Dummy00001 31.10.2014 22:52 # +1
wvxvw 01.11.2014 00:48 # −1
Dummy00001 01.11.2014 00:53 # −1
это ты про что?
> А я пользуюсь...
нет, не пользуешься. присутствие . и .. в листинге содержимого каталога не имеет ни какого отношения к конвенциям доступа к текущему каталогу или к поиску родительского каталога.
wvxvw 01.11.2014 02:42 # −1
Подробнее: подвести указатель к "." и нажать клавишу RET. Это создает новый буффер Dired в котором отображается содержание директории на которую указывает ".".
Одновременно может быть доступно много "." директорий, и иногда хочется выбрать только одну.
Dummy00001 01.11.2014 03:07 # +1
еще раз для тех кто в пятницу вечером слишком трезвый.
"." и ".." есть всего лишь конвенции для описания специальных каталогов.
разрабу на каждом readdir()'е спотыкатся на них постоянно просто не нужно.
диреду и прочим тулзам эти конвенции так или иначе приходится специально обрабатывать и реализовывать, потому что униформно с . или .. все равно работать не получается. на том же юнихе, все файл манагеры врут про .. из-за симлинков.
wvxvw 01.11.2014 09:40 # −1
Нет, Dired ничего специального не делает для "." или "..", просто обращается к ls с полученым именем.
Dummy00001 01.11.2014 13:42 # +1
это просто статические пропертисы каталога. разраб знает что они есть. а пользователю до лампочки.
> Нет, Dired ничего специального не делает
блин.
помедитируй над тем что именно происходит в этом шелл коде:
подсказка: почему в конце ты опять оказываешься в /tmp а не в /tmp/aaa??
wvxvw 01.11.2014 14:24 # −1
1024-- 01.11.2014 15:40 # +1
О, как в старые добрые времена до появления автогенератора.
Я спрашиваю, какие объекты лежат в указанном каталоге. Мне говорят, что там кроме того, что должно лежать, присутствует сам каталог (это ещё ладно, может такая геометрия резиновая), родительский каталог (как пихнули-то?) и где-то рядом на плоскости лежит голый мужик. И приходится людям фильтровать этот мусор для корректной обработки только потому, что одна из фич эмакса пользуется им. Идею мусорных точечек можно развить и добавить в список папок ещё и *, *.txt, *.exe, *.sh для удобства пользователей и более простой эмуляции функции "группировка по типу" из Windows Explorer.
Точки как договорённость есть в каждом каталоге. Нет смысла сообщать о них специально и ломать иерархию. Для родительского каталога можно предоставить всем желающим флаг "есть родитель", не более того. Уж можно было захардкодить точки в парочке утилит вроде dir и ls, которые нарочно их выводят вместо притягивания мусора за уши.
wvxvw 01.11.2014 16:43 # −1
wvxvw 01.11.2014 16:49 # −3
Вобщем, я не понимаю сути народных мытарств и возмущения по поводу наличия этих файлов в списке содержания директорий. Мне они не только не мешают, но я даже ими иногда пользуюсь.
bormand 01.11.2014 17:18 # 0
А в программных интерфейсах типа readdir(), где они нахер не сдались, и в 99% случаев их приходится вычеркивать из результатов.
wvxvw 01.11.2014 17:24 # −2
bormand 01.11.2014 17:27 # 0
Слава богу питоний os.listdir, Qt и жабий DirectoryStream писали здравомыслящие люди, которые додумались выкинуть этот мусор самостоятельно и не возвращать его среди результатов.
1024-- 01.11.2014 18:00 # 0
Dummy00001 01.11.2014 16:57 # +1
пример как раз и демонстрирует что ты *НЕ* попадаешь в директорию уровнем выше. а в директорию которая только кажется уровнем выше.
потому что /tmo/ccc это симлинк на /tmp/aaa/bbb, в bbb ".." указывает на /tmp/aaa, а не на /tmp.
ЗЫ а теперь по приколу напиши прогу (или перловый/этц скрипт) которая повторяет все эти шаги. и ты заметишь что у проги в конце будет текущий каталог /tmp/aaa.
wvxvw 01.11.2014 17:19 # −2
И вообще, с чего вы взяли, что оно должно работать каким-то определенным способом отличным от того, каким оно работает сейчас? У меня есть такое подозрение, что это просто пример прототипного мышления. Т.е. когда человек систематизирует знания опираясь на типичных представителей класса (в отличие от онтологии, например). С такой точки зрения воробей более птица, чем, скажем, пингвин (потому что типичные птицы летают). Точно так же, кто-то решил, что определенная метарфора (например, вложенности) применима к файловой системе. Потом выбрал типичный экземпляр этой метафоры, например, матрешку, и когда "не типичный" экземпляр - файловая система не соответствует по всем параметрам матрешки, негодует.
Никто ж не высказывал никаких обещаний о том, что папки будут всегда вложены так, что из них можно будет сделать направленый граф без циклов. Как правило это таки дерево, но вряд ли кто-то в здравом уме стал бы настаивать на том, что это должно быть дерево.
bormand 01.11.2014 17:34 # −1
wvxvw 01.11.2014 17:39 # −1
bormand 01.11.2014 17:40 # −1
Это всего лишь вырожденный случай системы с директориями.
inkanus-gray 01.11.2014 18:18 # −1
bormand 01.11.2014 19:12 # −1
inkanus-gray 01.11.2014 15:58 # −1
chtulhu 01.11.2014 12:04 # −1
bot 01.11.2014 02:14 # −1