Получение списка папок в каталоге

1.) Проверка здесь . В основном сделайте это:

Function FileExists(ByVal FileToTest As String) As Boolean
   FileExists = (Dir(FileToTest) <> "")
End Function

я предоставлю Вам право выяснять различную необходимую обработку ошибок, но это среди вещей обработки ошибок, которые я рассмотрел бы:

  • Проверка на передаваемую пустую строку.
  • Проверка на строку, содержащую символы, недопустимые в имени файла / путь

2.), Как Удалить Файл. Взгляд это. В основном используют команду Kill, но необходимо допускать возможность файла, являющегося только для чтения. Вот функция для Вас:

Sub DeleteFile(ByVal FileToDelete As String)
   If FileExists(FileToDelete) Then 'See above          
      ' First remove readonly attribute, if set
      SetAttr FileToDelete, vbNormal          
      ' Then delete the file
      Kill FileToDelete
   End If
End Sub

Снова, я оставлю обработку ошибок Вам, и снова это вещи, которые я рассмотрел бы:

  • это должно вести себя по-другому для каталога по сравнению с файлом? Пользователю, должно быть, придется явно указать, что они хотят удалить каталог?

  • Вы хотите, чтобы код автоматически сбросил атрибут "только для чтения", или пользователю нужно дать своего рода признак, что атрибут "только для чтения" установлен?

РЕДАКТИРОВАНИЕ: Отмечание этого ответа как сообщество Wiki, таким образом, любой может изменить его в случае необходимости.

86
задан Nietzche-jou 14 December 2009 в 06:11
поделиться

5 ответов

Джордан близок, но Dir.entries не возвращает полный путь, который ожидает File.directory? . Попробуйте следующее:

 Dir.entries('/your_dir').select {|entry| File.directory? File.join('/your_dir',entry) and !(entry =='.' || entry == '..') }
68
ответ дан 24 November 2019 в 07:57
поделиться
directory = 'Folder'
puts Dir.entries(directory).select { |file| File.directory? File.join(directory, file)}
4
ответ дан 24 November 2019 в 07:57
поделиться

In my opinion Pathname is much better suited for filenames than plain strings.

require "pathname"
Pathname.new(directory_name).children.select { |c| c.directory? }

This gives you an array of all directories in that directory as Pathname objects.

If you want to have strings

Pathname.new(directory_name).children.select { |c| c.directory? }.collect { |p| p.to_s }

If directory_name was absolute, these strings are absolute too.

45
ответ дан 24 November 2019 в 07:57
поделиться

Я думаю, вы можете протестировать каждый файл, чтобы убедиться, что это каталог с FileTest.directory? (имя_файла) . См. документацию по FileTest для получения дополнительной информации.

0
ответ дан 24 November 2019 в 07:57
поделиться

Вы можете использовать File.directory? из модуля FileTest , чтобы узнать, является ли файл каталогом. Комбинируя это с Dir.entries , можно получить хороший (ish) -liner:

directory = 'some_dir'
Dir.entries(directory).select { |file| File.directory? File.join(directory, file}

Edit: Обновлено в соответствии с исправлением ScottD.

4
ответ дан 24 November 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: