Jaka jest najbardziej niezawodna metoda przenoszenia całego katalogu z powiedzmy /tmp/RtmpK4k1Ju/oldname
na /home/jeroen/newname
? Najprostszym sposobem jest file.rename
jednak nie zawsze działa, na przykład, gdy from
i to
są na różnych dyskach. W takim przypadku cały katalog musi być rekurencyjnie skopiowany.Solidna, wieloplatformowa metoda przenoszenia katalogu
Oto coś, co wymyśliłem, ale jest trochę zaangażowane i nie jestem pewien, czy będzie działać na wielu platformach. Czy istnieje lepszy sposób?
dir.move <- function(from, to){
stopifnot(!file.exists(to));
if(file.rename(from, to)){
return(TRUE)
}
stopifnot(dir.create(to, recursive=TRUE));
setwd(from)
if(all(file.copy(list.files(all.files=TRUE, include.dirs=TRUE), to, recursive=TRUE))){
#success!
unlink(from, recursive=TRUE);
return(TRUE)
}
#fail!
unlink(to, recursive=TRUE);
stop("Failed to move ", from, " to ", to);
}
Nie jestem całkowicie pewien, jakie jest twoje aktualne pytanie. Dla mnie twój kod wygląda dobrze, ale nigdy nie zadeklarowałbym czegoś na platformie bez znajomości wszystkich platform, o których mówimy i testowania kodu na nich wszystkich. Czy chcesz, abyśmy przetestowali twój kod na różnych platformach raportujących wynik? Jeśli nie, to sądzę, że twój kod jest dość prosty i nie bierze w ogóle udziału, biorąc pod uwagę to, co robisz. Jedyne mniej zaangażowane rozwiązanie, jakie widziałem, zostało udzielone przez Carla Witthofta (w tym poprawki sugerowane w jego komentarzu), ale wygląda na to, że nie jest to to, czego szukasz. – mschilli