Chcę zapisać plik jako /a/b/c/d.txt, ale nie wiem, czy któryś z tych katalogów istnieje i muszę je rekurencyjnie utworzyć, jeśli to konieczne. Jak można to zrobić w rubinie?
Odpowiedzi:
Jeśli pracujesz na maszynach z systemem Unixy, nie zapominaj, że zawsze możesz uruchomić polecenie powłoki w Rubim, umieszczając je w odwrotnych znakach.
`mkdir -p /a/b/c`
Ścieżka na ratunek!
Pathname('/a/b/c/d.txt').dirname.mkpath
FileUtils.mkdir_p '/a/b/c'+ tworzyć d.txtw tym samym czasie?
Pathname('/a/b/c/d.txt').dirname.mkpathi File.write('/a/b/c/d.txt', content)bez filename = '/a/b/c/d.txt'.rpartition('/').lastoraz reszta analizy
Możesz także użyć własnej logiki
def self.create_dir_if_not_exists(path)
recursive = path.split('/')
directory = ''
recursive.each do |sub_directory|
directory += sub_directory + '/'
Dir.mkdir(directory) unless (File.directory? directory)
end
end
Jeśli więc ścieżka to „tmp / a / b / c”, jeśli „tmp” nie istnieje, zostanie utworzony „tmp”, a następnie zostanie utworzony „tmp / a /” i tak dalej.
FileUtilsiPathnameto prawdopodobnie z najważniejszych narzędzi dla Ruby skryptów powłoki.