21 / 21 / 1
Регистрация: 24.07.2013
Сообщений: 121
|
||||||
1 | ||||||
Clojure Задать директорию и вывести список файлов и их размеры04.04.2014, 23:21. Показов 2880. Ответов 29
Метки нет (Все метки)
Здравствуйте, дорогие форумчане и гости!
Собственно, задачу Я описал в заголовке. Интересует: какая функция Lisp возвращает список файлов в заданной директории и чтобы с каждого из них(файлов) можно было вытащить информацию о его размере на диске? Как найти размер файла Я примерно знаю:
0
|
04.04.2014, 23:21 | |
Ответы с готовыми решениями:
29
Размеры файлов в список Нужно вывести на экран информацию про системную директорию и директорию windows Вывести имена и размеры всех файлов в заданном каталоге и упорядочить их Модуль DOS. Вывести на экран размеры всех файлов, находящихся в текущем каталоге |
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
|
|
04.04.2014, 23:35 | 2 |
Mypowerfulbrain, cl-fad
1
|
Модератор
|
||||||
04.04.2014, 23:45 | 3 | |||||
В HomeLisp - три строчки:
3
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
||||||
05.04.2014, 02:41 | 4 | |||||
Mypowerfulbrain, ваш код нехорош. Файлы следует открывать с помощью with-open-file, это защищает от последствий ошибок ввода/вывода. Файлы - это внешний мир, всегда надо быть осторожным.
Думается, список файлов в директории лучше всего получать с помощью библиотеки uiop.
uiop - это часть ASDF3, она будет всегда и везде, и люди стараются на самом деле, должно получиться максимально переносимо между системами и реализациями. То есть uiop - это завтрашний день. cl-fad - вчерашний. Сегодня - ?
3
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
05.04.2014, 15:30 | 6 |
Наверно, file-length так и делает, иначе зачем ему дают открытый поток. Кстати, вот обсуждение, инициированное небезызвестным Seib'l-ем: https://groups.google.com/foru... L0qGLZcP0J
"Все файловые системы" в стандарт не внесёшь. Жалко, однако, что в uiop, кажется, нет ничего про размер файла.
1
|
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
|
|||||||||||||||||||||
05.04.2014, 16:43 | 7 | ||||||||||||||||||||
почему?
Добавлено через 22 минуты
и ещё один убийственный тест:
блин, живу вчерашним днём.... =)
3
|
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
|
|
05.04.2014, 17:55 | 9 |
3
|
Модератор
|
|
05.04.2014, 20:30 | 10 |
transformator.t, согласен, убедили!
Добавлено через 1 минуту Но в Win все это можно сделать и без открытия (open) Добавлено через 2 минуты Полагаю, кстати, что и в Вашем примере не происходит подсчета байтов. Длина берется из оглавления. Просто в Win это можно сделать и без открытия файла.
2
|
Заблокирован
|
||||||
05.04.2014, 20:37 | 11 | |||||
Вот так примерно может выглядеть подобный код на автолисп
5
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
05.04.2014, 21:20 | 13 |
В стандарте Common Lisp предусмотрена функция file-length, которая принимает поток. Открывать надо. Только мы не знаем, кто как реализует эту функцию. Можно представить реализацию, в которой file-length не читает файл, а обращается к ОС.
3
|
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
|
||||||||||||||||
05.04.2014, 22:30 | 14 | |||||||||||||||
helter, если взять микроскоп, то для linux:
точки расставлены:
5
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
||||||
05.04.2014, 22:59 | 15 | |||||
На Clojure как то так:
3
|
Модератор
|
|
06.04.2014, 09:41 | 16 |
- стандарты создают люди, а не боги. Людям свойственно ошибаться. Собственно, ситуация, при которой созданный и утвержденный стандарт оказывается крайне неудобным, встречается очень часто (и в IP, и в HHTP, и в HTML). И что, быть рабом стандарта?
Вообще в любой ОС операция "open" одна из самых медленных. Поэтому, если в стандарте CL, единственный способ узнать длину файла - это его открыть, то стандарт... неправ. Другое дело, что о длине файла можно говорить в двух случаях: длина неоткрытого файла (т.е. длина набора данных на носителе, о чем мы и говорим) и длина этого набора у активного файла (с которым выполнялись операции), в этом случае логично обращаться к файлу через его хэндл... Даже в VB/VBA есть две функции: 1) FileLen(String) - длина без открытия; 2) Lof(integer) - длина открытого.
1
|
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
|
||||||
06.04.2014, 11:10 | 17 | |||||
никаких заголовков не видно:
1
|
21 / 21 / 1
Регистрация: 24.07.2013
Сообщений: 121
|
|
06.04.2014, 11:49 [ТС] | 18 |
Люди, всем большое спасибо. Сейчас у меня практически нет времени появляться на форуме и пробовать советы, но Я это сделаю в ближайшее время.
0
|
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
|
|||||||||||||||||||||
06.04.2014, 13:26 | 19 | ||||||||||||||||||||
ещё раз глянул:
наверное нужно покурить спецификацию фс
2
|
Модератор
|
|
06.04.2014, 13:48 | 20 |
- несомненно.
Добавлено через 5 минут На самом деле, после некоторого размышления, я пришел к выводу, что можно примирить реализацию стандарта CL и здравый смысл. Достаточно предположить, что реализация open на самом деле открывает файл при первой операции ввода/вывода. Тогда можно "открыть" поток и получить длину на диске (из оглавления) без реального открытия. Это будет выполняться достаточно быстро. Экономится одна функция и модель становится стройнее (все - через поток).
2
|
06.04.2014, 13:48 | |
06.04.2014, 13:48 | |
Помогаю со студенческими работами здесь
20
FTP: получение списка файлов из потока. Как вывести список файлов из директории? Установка в выбранную директорию 2 файлов и автоматическое занесение файлов реестра Как правильно задать директорию? Вывести на экран размеры типов и размеры указателей на объекты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |