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, таким образом, любой может изменить его в случае необходимости.
Джордан близок, но Dir.entries
не возвращает полный путь, который ожидает File.directory?
. Попробуйте следующее:
Dir.entries('/your_dir').select {|entry| File.directory? File.join('/your_dir',entry) and !(entry =='.' || entry == '..') }
directory = 'Folder'
puts Dir.entries(directory).select { |file| File.directory? File.join(directory, file)}
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.
Я думаю, вы можете протестировать каждый файл, чтобы убедиться, что это каталог с FileTest.directory? (имя_файла)
. См. документацию по FileTest для получения дополнительной информации.
Вы можете использовать File.directory?
из модуля FileTest
, чтобы узнать, является ли файл каталогом. Комбинируя это с Dir.entries
, можно получить хороший (ish) -liner:
directory = 'some_dir'
Dir.entries(directory).select { |file| File.directory? File.join(directory, file}
Edit: Обновлено в соответствии с исправлением ScottD.