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?
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.
Umieszczenie polecenia systemowego w podprocesie nie jest najlepszym pomysłem. Lepiej zrobić to za pomocą standardowej biblioteki Ruby, aby uzyskać obsługę błędów, sprawdzić wynik itp.
Pytanie brzmi: „Chcę zapisać plik jako /a/b/c/d.txt, ale nie wiem, czy któryś z tych katalogów istnieje”. Moje rozwiązanie pozwala na wykorzystanie istniejącej ścieżki do plików („/a/b/c/d.txt”) i, bez oddzielnego analizowania, stworzyć wszystkie foldery.
Vadym Tyemirov
Masz na myśli to, że pozwala robić FileUtils.mkdir_p '/a/b/c'+ tworzyć d.txtw tym samym czasie?
noraj
Nie, zamiast tego pozwala 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
FileUtils
iPathname
to prawdopodobnie z najważniejszych narzędzi dla Ruby skryptów powłoki.Użyj mkdir_p do rekurencyjnego tworzenia katalogu
źródło
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.
źródło
File.makedirs
źródło
mkdir_p
imkpath
ruby-doc.org/stdlib-2.6.5/libdoc/fileutils/rdoc/…Ścieżka na ratunek!
źródło
FileUtils.mkdir_p '/a/b/c'
+ tworzyćd.txt
w tym samym czasie?Pathname('/a/b/c/d.txt').dirname.mkpath
iFile.write('/a/b/c/d.txt', content)
bezfilename = '/a/b/c/d.txt'.rpartition('/').last
oraz reszta analizyMożesz także użyć własnej logiki
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.
źródło