File Rename
From Rosetta Code
Programming Task
This is a programming task. It lays out a problem which Rosetta Code users are encouraged to solve, using languages they know.
In this task, the job is to rename the file called "input.txt" into "output.txt" and a directory called "docs" into "mydocs". This should be done twice: once "here", i.e. in the current working directory and once in the filesystem root.
Contents |
[edit] C
Works with: gcc version 4.1.2 20061115 (prerelease) (SUSE Linux)
#include <stdio.h> int main() { rename("input.txt", "output.txt"); rename("docs", "mydocs"); rename("/input.txt", "/output.txt"); rename("/docs", "/mydocs"); return 0; }
[edit] ALGOL 68
Note: reidf does not appear to be included in ALGOL 68G. Also note that file names would be Operating System dependent.
main:(
PROC rename = (STRING source name, dest name)INT:
BEGIN
FILE actual file;
INT errno = open(actual file, source name, stand back channel);
IF errno NE 0 THEN
errno
ELSE
IF reidf possible(actual file) THEN
reidf(actual file, dest name); # change the identification of the book #
errno
ELSE
close(actual file);
-1
FI
FI
END;
rename("input.txt", "output.txt");
rename("/input.txt", "/output.txt");
rename("docs", "mydocs");
rename("/docs", "/mydocs")
)
[edit] DOS Batch File
ren input.txt output.txt ren \input.txt output.txt ren docs mydocs ren \docs mydocs
[edit] Forth
s" input.txt" s" output.txt" rename-file throw s" /input.txt" s" /output.txt" rename-file throw
[edit] Groovy
Using File
['input.txt':'output.txt', 'docs':'mydocs'].each { src, dst ->
['.', ''].each { dir ->
new File("$dir/$src").renameTo(new File("$dir/$dst"))
}
}
Using Ant
['input.txt':'output.txt', 'docs':'mydocs'].each { src, dst ->
['.', ''].each { dir ->
new AntBuilder().move(file:"$dir/$src", toFile:"$dir/$dst")
}
}
[edit] Haskell
import System.IO import System.Directory main = do renameFile "input.txt" "output.txt" renameDirectory "docs" "mydocs" renameFile "/input.txt" "/output.txt" renameDirectory "/docs" "/mydocs"
[edit] Java
import java.util.File;
public class FileRenameTest {
public static boolean renameFile(String oldname, String newname) {
// File (or directory) with old name
File file = new File(oldname);
// File (or directory) with new name
File file2 = new File(newname);
// Rename file (or directory)
boolean success = file.renameTo(file2);
return sucess;
}
public static void test(String type, String oldname, String newname) {
System.out.println("The following " + type + " called " + oldname +
( renameFile(oldname, newname) ? " was renamed as " : " could not be renamed into ")
+ newname + "."
);
}
public static void main(String args[]) {
test("file", "input.txt", "output.txt");
test("file", File.seperator + "input.txt", File.seperator + "output.txt");
test("directory", "docs", "mydocs");
test("directory", File.seperator + "docs" + File.seperator, File.seperator + "mydocs" + File.seperator);
}
}
[edit] MAXScript
MAXScript has no folder rename method
-- Here renameFile "input.txt" "output.txt" -- Root renameFile "/input.txt" "/output.txt"
[edit] OCaml
Sys.rename "input.txt" "output.txt";; Sys.rename "docs" "mydocs";; Sys.rename "/input.txt" "/output.txt";; Sys.rename "/docs" "/mydocs";;
[edit] Perl
use File::Copy qw(move); use File::Spec::Functions qw(catfile rootdir); # here move 'input.txt', 'output.txt'; move 'docs', 'mydocs'; # root dir move (catfile rootdir, 'input.txt'), (catfile rootdir, 'output.txt'); move (catfile rootdir, 'docs'), (catfile rootdir, 'mydocs');
[edit] Pop11
sys_file_move('inputs.txt', 'output.txt');
sys_file_move('docs', 'mydocs');
sys_file_move('/inputs.txt', '/output.txt');
sys_file_move(/'docs', '/mydocs');
Note that notion of the root of filesystem is Unix specific, so above we do not try to suport other systems.
[edit] PowerShell
Rename-Item input.txt output.txt
# The Rename-item has the alias ren ren input.txt output.txt
[edit] Python
import os
os.rename("input.txt", "output.txt")
os.rename("docs", "mydocs")
os.rename("/input.txt", "/output.txt")
os.rename("/docs", "/mydocs")
[edit] Ruby
It uses a hash to store the source and destination, so it's easy to add more dirs/files to move and you can easily switch to using another method to move them.
#!/usr/bin/env ruby
require 'FileUtils'
moves = { "input.txt" => "output.txt", "/input.txt" => "/output.txt", "docs" => "mydocs","/docs" => "/mydocs"}
moves.each{ |src, dest| FileUtils.move( src, dest, :verbose => true ) }
[edit] Tcl
Assuming that the Bash example shows what is actually meant with this task (one file and one directory here, one file and one directory in the root) and further assuming that this is supposed to be generic (i.e. OS agnostic):
file rename inputs.txt output.txt file rename docs mydocs file rename [file nativename /inputs.txt] [file nativename /output.txt] file rename [file nativename /docs] [file nativename /mydocs]
[edit] Toka
needs shell " input.txt" " output.txt" rename " /input.txt" " /output.txt" rename " docs" " mydocs" rename " /docs" " /mydocs" rename
[edit] UNIX Shell
mv input.txt output.txt mv /input.txt /output.txt mv docs mydocs mv /docs /mydocs
[edit] Visual Basic .NET
Platform: .NET
Works with: Visual Basic .NET version 9.0+
'Current Directory
IO.Directory.Move("docs", "mydocs")
IO.File.Move("input.txt", "output.txt")
'Root
IO.Directory.Move("\docs", "\mydocs")
IO.File.Move("\input.txt", "\output.txt")
'Root, platform independent
IO.Directory.Move(IO.Path.DirectorySeparatorChar & "docs", _
IO.Path.DirectorySeparatorChar & "mydocs")
IO.File.Move(IO.Path.DirectorySeparatorChar & "input.txt", _
IO.Path.DirectorySeparatorChar & "output.txt")
Categories: Less Than 20 Examples | Programming Tasks | File System Operations | C | ALGOL 68 | DOS Batch File | Forth | Groovy | Haskell | Java | MAXScript | OCaml | Perl | Pop11 | PowerShell | Python | Ruby | Tcl | Toka | UNIX Shell | Visual Basic .NET

