2010-01-20 2 views
2

Я недавно тестировал библиотеку Pathname, и одна вещь, которую я хочу сделать, это использовать mkdir для создания некоторых каталогов.Почему я не могу использовать «mkdir» с объектом Pathname?

Я посмотрел документацию и он говорит, что оборачивает mkdir, но каждый раз, когда я пытаюсь использовать его I`m получаю эту ошибку:

irb(main):006:0> p = Pathname.new('/tmp') 
=> #<Pathname:/tmp> 
irb(main):007:0> a = p.mkdir("123adam") 
TypeError: can't convert String into Integer 
    from /usr/lib/ruby/1.8/pathname.rb:975:in `mkdir' 
    from /usr/lib/ruby/1.8/pathname.rb:975:in `mkdir' 
    from (irb):7 
    from /usr/lib/ruby/1.8/fileutils.rb:1589 

Может кто-нибудь объяснить, что I`m здесь делаю неправильно.

ответ

7

Вам нужно указать каталог, который вы хотите создать, с помощью Pathname, а затем позвонить mkdir.

Это должно работать:

p = Pathname.new('/tmp/123adam') 
p.mkdir 

Аргумент вы можете предоставить права доступа для нового каталога.

+0

ahhhh теперь я понимаю! Спасибо огромное! – robodisco

+0

Альтернативно: '(p +" 123adam "). Mkdir' –

2

Из интереса, причина, почему вы получаете «не может преобразовать строку в Integer», потому что Pathname.mkdir на самом деле является оберткой Dir.mkdir следующим образом:

def mkdir(*args) Dir.mkdir(@path, *args) end 

Путь, представленный Pathname объект передается как первый параметр, равный Dir.mkdir, за которым следуют любые параметры, переданные в Pathname.mkdir. Второй параметр для Dir.mkdir - это числовые разрешения доступа, которые вы хотели бы создать у созданного каталога. Следовательно, в вашем примере "123adam" передается Dir.mkdir, где ожидается число.