Clean3.0 получить содержимое каталога

#clean-language

#чистый язык

Вопрос:

Я использую Cleanide для Clean3.0 языка программирования. Что я пытаюсь сделать, так это реализовать функцию, которая получает имя каталога в моей системе и возвращает список всех файлов в этом каталоге.

Я не знаю, должно ли определение такой функции быть таким, File -> [string] или, может быть, что-то еще, даже если этот каталог является файлом, возможно, разработчики Clean имели в виду не это…

Большое спасибо!

Ответ №1:

Эта функциональность недоступна в среде StdEnv, но есть две библиотеки, которые могут помочь с этим:

  • Библиотека Directory содержит каталог модуля, который имеет функцию getDirectoryContents :: !Path !*env -> (!(!DirError, [DirEntry]), !*env) | FileSystem env .

  • Библиотека платформы содержит модульную систему.Каталог, в котором есть функция readDirectory :: !FilePath !*w -> (!MaybeOSError [FilePath], !*w) .

В обоих случаях первым аргументом является путь к каталогу, а вторым аргументом является *World , что является типичным способом Clean для выполнения нечистых операций (см. Главу 9 Отчета о языке).

Примеры кода

С помощью Directory:

 import Directory

Start w
# (dir,w) = getDirectoryContents (RelativePath []) w
= dir
  

С помощью платформы:

 import System.Directory

Start w
# (dir,w) = readDirectory "." w
= dir
  

Комментарии:

1. Большое спасибо. Пожалуйста, учтите тот факт, что я новичок, можете ли вы опубликовать пример кода?

2. @ZENir Я обновил ответ примерами для обоих модулей.

3. Спасибо. Я все еще не уверен, как получить содержимое определенного каталога. допустим, "C:UsersUsermyDir" можете ли вы помочь мне с этим?

4. @ZENir Вы бы использовали это в качестве первого аргумента. Так, например, "C:\Users\User\myDir" для платформы или AbsolutePath "C" [PathDown "Users",PathDown "User",PathDown "myDir"] для каталога.