Rename a file: Difference between revisions

From Rosetta Code
Content added Content deleted
m (→‎[[Java]]: Use Java header instead)
m (Changed over to headers.)
Line 4: Line 4:
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.
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.


=={{header|DOS Batch File}}==
==[[Forth]]==
[[Category:Forth]]

s" input.txt" s" output.txt" rename-file throw
s" /input.txt" s" /output.txt" rename-file throw

==[[DOS Batch File]]==
[[Category:DOS Batch File]]


ren input.txt output.txt
ren input.txt output.txt
ren \input.txt \output.txt
ren \input.txt \output.txt


=={{header|Forth}}==
==[[Groovy]]==

[[Category:Groovy]]
s" input.txt" s" output.txt" rename-file throw
s" /input.txt" s" /output.txt" rename-file throw

=={{header|Groovy}}==


Using File
Using File
Line 64: Line 61:
}
}


==[[MAXScript]]==
=={{header|MAXScript}}==
[[Category:MAXScript]]
MAXScript has no folder rename method
MAXScript has no folder rename method
-- Here
-- Here
Line 72: Line 68:
renameFile "/input.txt" "/output.txt"
renameFile "/input.txt" "/output.txt"


==[[Perl]]==
=={{header|Perl}}==
[[Category:Perl]]
use File::Copy qw(move);
use File::Copy qw(move);
use File::Spec::Functions qw(catfile rootdir);
use File::Spec::Functions qw(catfile rootdir);
Line 83: Line 78:
move (catfile rootdir, 'docs'), (catfile rootdir, 'mydocs');
move (catfile rootdir, 'docs'), (catfile rootdir, 'mydocs');


==[[Pop11]]==
=={{header|Pop11}}==
[[Category:Pop11]]


sys_file_move('inputs.txt', 'output.txt');
sys_file_move('inputs.txt', 'output.txt');
Line 94: Line 88:
do not try to suport other systems.
do not try to suport other systems.


==[[Ruby]]==
=={{header|Ruby}}==
[[Category: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.
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.


Line 103: Line 96:
moves.each{ |src, dest| FileUtils.move( src, dest, :verbose => true ) }
moves.each{ |src, dest| FileUtils.move( src, dest, :verbose => true ) }


==[[Tcl]]==
=={{header|Tcl}}==
[[Category:Tcl]]


<i>Assuming</i> 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):
<i>Assuming</i> 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):
Line 114: Line 106:
file rename [file nativename /docs] [file nativename /mydocs]
file rename [file nativename /docs] [file nativename /mydocs]


==[[Toka]]==
=={{header|Toka}}==
[[Category:Toka]]


needs shell
needs shell
Line 124: Line 115:
" /docs" " /mydocs" rename
" /docs" " /mydocs" rename


=={{header|UNIX Shell}}==


mv input.txt output.txt
==[[Visual Basic .NET]]==
mv /input.txt /output.txt
[[Category:Visual Basic .NET]]
mv docs mydocs
mv /docs /mydocs


=={{header|Visual Basic .NET}}==


'''Platform:''' [[.NET]]
'''Platform:''' [[.NET]]
Line 145: Line 142:
IO.File.Move(IO.Path.DirectorySeparatorChar & "input.txt", _
IO.File.Move(IO.Path.DirectorySeparatorChar & "input.txt", _
IO.Path.DirectorySeparatorChar & "output.txt")
IO.Path.DirectorySeparatorChar & "output.txt")

==[[UNIX Shell]]==
[[Category:UNIX Shell]]

mv input.txt output.txt
mv /input.txt /output.txt
mv docs mydocs
mv /docs /mydocs

Revision as of 20:28, 12 November 2007

Task
Rename a file
You are encouraged to solve this task according to the task description, using any language you may 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.

DOS Batch File

 ren input.txt output.txt
 ren \input.txt \output.txt

Forth

 s" input.txt"  s" output.txt" rename-file throw
s" /input.txt" s" /output.txt" rename-file throw

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")
   }
 }

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);
   }
}

MAXScript

MAXScript has no folder rename method

-- Here
renameFile "input.txt" "output.txt"
-- Root
renameFile "/input.txt" "/output.txt"

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');

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.

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 ) }

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]

Toka

 needs shell
 " input.txt"  " output.txt"  rename
 " /input.txt"  " /output.txt"  rename
 
 " docs"  " mydocs"  rename
 " /docs"  " /mydocs"  rename

UNIX Shell

 mv input.txt output.txt
 mv /input.txt /output.txt
 mv docs mydocs
 mv /docs /mydocs


Visual Basic .NET

Platform: .NET

Language 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")