簡體   English   中英

紅寶石:無法使用FileUtil創建目錄

[英]ruby: Can't create directory with FileUtil

我已經定義了一個module

require 'dir'
require 'fileutils'
module Checker

  # Checks if the targetdirectory are present. If not, it creates one
  def self.check_dir
    # Checking if dir exists
    if Dir.exist?("#{@todo}")
      puts 'Found directory. Im using it.'
    else
      puts 'No directory found. Im creating it.'
      # Creates the new directory
      FileUtils.mkdir_p("#{@todo}")
        if Dir.exist?("#{@todo}")
          raise('Cant create directory')
        else
          puts 'Created new directory...'
        end
    end
  end
end

我在這里使用它:

puts "Erstellt Verzeichnis #{articles_dir}/#{titel}"
@todo = "#{articles_dir}/#{titel}"
Checker.check_dir

puts 'Wechsle in article Verzeichnis'
FileUtils.cd("#{articles_dir}/#{titel}") do

[...stuff...]

end

但是運行代碼后,我得到:

Erstellt Verzeichnis
/home/sascha/Dokumente/Textdokumente/publican-dokumentation2/articles/TestEIns
/home/sascha/ownCloud/RubymineProjects/PublicanCreators/lib No
directory found. Im creating it.
/usr/lib/ruby/2.2.0/fileutils.rb:252:in `mkdir': No such file or
directory @ dir_s_mkdir -  (Errno::ENOENT)    from
/usr/lib/ruby/2.2.0/fileutils.rb:252:in `fu_mkdir'    from
/usr/lib/ruby/2.2.0/fileutils.rb:226:in `block (2 levels) in mkdir_p'
  from /usr/lib/ruby/2.2.0/fileutils.rb:224:in `reverse_each'     from
/usr/lib/ruby/2.2.0/fileutils.rb:224:in `block in mkdir_p'    from
/usr/lib/ruby/2.2.0/fileutils.rb:210:in `each'    from
/usr/lib/ruby/2.2.0/fileutils.rb:210:in `mkdir_p'     from
/home/sascha/RubymineProjects/PublicanCreators/lib/PublicanCreators/checker.rb:14:in
`check_dir'   from
/home/sascha/RubymineProjects/PublicanCreators/lib/PublicanCreators.rb:60:in
`<top (required)>'    from -e:1:in `load'     from -e:1:in `<main>' Process
finished with exit code 1

作為變量,我正在使用:

home = Dir.home
publican_doc_dir = "#{home}/Dokumente/Textdokumente/publican-dokumentation2"
articles_dir = "#{publican_doc_dir}/articles"
titel = `yad --entry --button="Bestätigen" --title="Neuen Artikel erstellen" --text="Gebe ein Titel ein (Mit Unterstrichen statt Leerzeichen und ohne Umlaute):"`

推桿毛刺為我提供了正確的輸出。

也許我錯過了什么?

這是因為實例變量@todo在模塊Checker未定義/不可用。

您可以使用以下方法對此進行驗證:

module Checker
 def self.check_dir
  puts @todo
 end
end

@todo = "hello"
Checker::check_dir
#
# => nil

有關在模塊內部如何使用實例變量的詳細信息, 請參考此SO

我發現的另一件事是mkdir創建了#{publican_doc_dir} / articles /#{title}?/#{title}。 因此,articles / test01?/ test01代替articles / test01。 奇怪的事情...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM