Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
21 / 21 / 1
Регистрация: 24.07.2013
Сообщений: 121
1

Clojure Задать директорию и вывести список файлов и их размеры

04.04.2014, 23:21. Показов 2887. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, дорогие форумчане и гости!
Собственно, задачу Я описал в заголовке.
Интересует: какая функция Lisp возвращает список файлов в заданной директории и чтобы с каждого из них(файлов) можно было вытащить информацию о его размере на диске?
Как найти размер файла Я примерно знаю:
Lisp
1
2
3
(setq somefile (open "C://file/name.txt"))
(file-length somefile)
(close somefile)
Помогите, пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2014, 23:21
Ответы с готовыми решениями:

Размеры файлов в список
Доброго времени суток. Подскажите пожалуйста вот что: Есть у меня папка с файлами, хочу написать...

Нужно вывести на экран информацию про системную директорию и директорию windows
Помогите плз!Нужно написать прогу которая выводит на екран такую инфу:Computer name,user...

Вывести имена и размеры всех файлов в заданном каталоге и упорядочить их
Выведите на экран имена и размеры всех файлов в заданном каталоге. Отсортируйте • по дате...

Модуль DOS. Вывести на экран размеры всех файлов, находящихся в текущем каталоге
Вывести на экран размеры всех файлов, находящихся в текущем каталоге, имена которых начинаются на...

29
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
06.04.2014, 16:50 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Catstail Посмотреть сообщение
Поэтому, если в стандарте CL, единственный способ узнать длину файла - это его открыть, то стандарт... неправ.
Может и так, может и нет. А что бы вы предложили вместо?

Стандарт в высокой степени платформонезависим, особенности Unix или Windows в принципе не могли в него включаться. Напомню, что при проектировании принципов работы CL с файловой системой для достижения кроссплатформенности требовались весьма значительные усилия.
Историческое разнообразие файловых систем, существующих в период 70-80 годов, можно легко забыть. Кент Питман, один из ведущих технических редакторов стандарта Common Lisp, описал однажды ситуацию в comp.lang.lisp (Message-ID: sfwzo74np6w.fsf@world.std.com) так:

В момент завершения проектирования Common Lisp господствующими файловыми системами были TOPS-10, TENEX, TOPS-20, VAX VMS, AT&T Unix, MIT Multics, MIT ITS, и это не упоминаю группу систем для мэйнфрэймов. В некоторых системах имена файлов были только в верхнем регистре, в других – смешанные, в третьих – чувствительны к регистру, но с возможностью преобразования (как в CL). Какие-то имели групповые символы (wildcards), какие-то – нет. Одни имели :вверх (:up) в относительных файловых путях, другие – нет. Также существовали файловые системы без каталогов, файловые системы без иерархической структуры каталогов, файловые системы без типов файлов, файловые системы без версий, файловые системы без устройств и т.д.

Если сейчас посмотреть на абстракцию файловых путей с точки зрения какой-нибудь определенной файловой системы, она выглядит нелепо. Но если взять в рассмотрение даже такие две похожие файловые системы, как в Windows и Unix, то вы можете заметить отличия, от которых можно отвлечься с помощью системы файловых путей. Файловые имена в Windows содержат букву диска в то время, как в Unix нет. Другое преимущество владения абстракцией файловых путей, которая спроектирована, чтобы оперировать большим разнообразием файловых систем, которые существовали в прошлом, – ее вероятная способность управлять файловыми системами, которые будут существовать в будущем. Если, скажем, файловые системы с сохранением всех старых данных и истории операций войдут снова в моду, Common Lisp будет к этому готов.
Да, CL готов к файловым системам будущего.

Чем интересен стандарт CL - что его разрабатывал не один умный человек, а несколько умных людей, а потом коллегиально принимали много умных людей. Можно ожидать, что его решения близки к оптимальным.

Вообще, поскольку ФС (и ОС) в принципе трансцендентна по отношению к лиспу, имхо можно было бы отдать взаимодействие с ней на откуп реализациям, такой "минималистичный" вариант. Разработчики стандарта, как обычно, поступили противоположным образом: постарались охватить как можно более широкий класс систем. С другой стороны, реализации действительно могут дать другие пути решения задачи (размер файла): я уже упоминал обращение к ОС, а transformator.t напомнил про использование FFI.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36917 / 20471 / 4242
Регистрация: 12.02.2012
Сообщений: 33,837
Записей в блоге: 13
06.04.2014, 17:25 22
Цитата Сообщение от helter Посмотреть сообщение
Может и так, может и нет. А что бы вы предложили вместо?
- выше я уже написал. Повторю: в данном конкретном случае (для win/nix) в реализации открытия потока, open выдавать при первой операции ввода/вывода, а длину брать из элемента оглавления. Это вполне примиряет стандарт с обычной практикой (считать байты не нужно). Ну, а в тех ОС, где длина файла не поддерживается (напр. IBM-370), просто возвращать 0 (там длина файла не нужна).
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
06.04.2014, 17:33 23
Цитата Сообщение от Catstail Посмотреть сообщение
из элемента оглавления
какого оглавления?

Добавлено через 31 секунду
покажите пример
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36917 / 20471 / 4242
Регистрация: 12.02.2012
Сообщений: 33,837
Записей в блоге: 13
06.04.2014, 18:04 24
Цитата Сообщение от transformator.t Посмотреть сообщение
какого оглавления?
- директории, где расположен файл. Пример чего показать? Я не обращался к оглавлению директории. Я думаю, что обычная команда dir, без проблем показывающая любое оглавление с длинами файлов, навряд ли открывает каждый файл (хотя могу и ошибаться). Откуда же dir так быстро берет длины файлов? Из оглавления, больше не откуда.
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
06.04.2014, 18:49 25
Цитата Сообщение от Catstail Посмотреть сообщение
- выше я уже написал. Повторю: в данном конкретном случае (для win/nix) в реализации открытия потока, open выдавать при первой операции ввода/вывода, а длину брать из элемента оглавления.
А, ну реализации под конкретные ОС - это понятно. Просто в стандарт ничего такого не засунешь.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
07.04.2014, 03:51 26
Цитата Сообщение от Catstail Посмотреть сообщение
а длину брать из элемента оглавления
Вы говорите о метаданных файлов.
>
Цитата Сообщение от transformator.t Посмотреть сообщение
Bash
1
2
# strace -s 512 ls -l etc-last.xz 2>&1 | grep lstat 
lstat("etc-last.xz", {st_mode=S_IFREG|0644, st_size=1220368, ...}) = 0
Цитата Сообщение от transformator.t Посмотреть сообщение
никаких заголовков не видно
Можно иногда и шлангом прикинуться. Как-то Вы наперед знаете что будет именно lstat, а не fstat, stat.
>
Lisp
1
2
3
4
5
6
7
;racket
(define (foo path)
  (let prt ((lst (directory-list path #:build? #t)))
    (cond ((null? lst))
          ((file-exists? (car lst))
           (and (displayln (file-size (car lst))) (prt (cdr lst))))           
          (else (prt (cdr lst))))))
>/me
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36917 / 20471 / 4242
Регистрация: 12.02.2012
Сообщений: 33,837
Записей в блоге: 13
07.04.2014, 06:55 27
Цитата Сообщение от castorsky Посмотреть сообщение
Вы говорите о метаданных файлов.
- Бога ради! "Хоть горшком назови..."
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
07.04.2014, 13:34 28
castorsky, чего?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
07.04.2014, 14:57 29
Цитата Сообщение от Catstail Посмотреть сообщение
- Бога ради! "Хоть горшком назови...
Называя вещи не совими именами Вы даете повод для искажения смысла Ваших слов. Например, так
Цитата Сообщение от transformator.t Посмотреть сообщение
никаких заголовков не видно:
так
Цитата Сообщение от transformator.t Посмотреть сообщение
ещё раз глянул:
так
Цитата Сообщение от transformator.t Посмотреть сообщение
00000019 - это размер, ок, но он расположен не в голове...
так
Цитата Сообщение от transformator.t Посмотреть сообщение
наверное нужно покурить спецификацию фс
так
Цитата Сообщение от transformator.t Посмотреть сообщение
какого оглавления?
Добавлено через 31 секунду
покажите пример
Кстати спецификацию фс в данном случае курить не нужно. Достаточно дёрнуть stat (это актуально nix, win, mac), учитывая особенности конкретной платформы. Это так же является ответом на Ваш вопрос
Цитата Сообщение от Catstail Посмотреть сообщение
Откуда же dir так быстро берет длины файлов? Из оглавления, больше не откуда.
А вот когда мы хотим написать свою stat(conat char *, struct stat * buf), тогда конечно придется покурить спеки фс. Это не утомительно + еще дополнительный скил в навык.
>
transformator.t, если для Вас эти слова обидны, то прошу меня извинить. Поверьте, я не желал Вас оскорбить или высмеять.
Цитата Сообщение от castorsky Посмотреть сообщение
Можно иногда и шлангом прикинуться. Как-то Вы наперед знаете что будет именно lstat, а не fstat, stat.
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36917 / 20471 / 4242
Регистрация: 12.02.2012
Сообщений: 33,837
Записей в блоге: 13
07.04.2014, 15:22 30
castorsky, согласен. Убедительно.
0
07.04.2014, 15:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2014, 15:22
Помогаю со студенческими работами здесь

FTP: получение списка файлов из потока. Как вывести список файлов из директории?
доброго времени суток. пытаюсь написать свой FTP-клиент. отправил серверу команду LIST, и в...

Установка в выбранную директорию 2 файлов и автоматическое занесение файлов реестра
Здравствуйте. Мне нужно чтобы моя прога установила в выбранной директорию 2 файла. И у меня есть...

Как правильно задать директорию?
$config = base_url('/assets/'); не загружаются картинки

Вывести на экран размеры типов и размеры указателей на объекты
Составить программу, которая позволяет вычислить и вывести на экран размеры типов и размеры...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru