Rename a file: Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
m (→‎[[File_Rename#ALGOL 68]]: stone age file rename. Can probably relabel a tape on MULTICS)
Line 17: Line 17:
* file extension syntax;
* file extension syntax;
* file system root (provided there is any).
* file system root (provided there is any).
=={{header|ALGOL 68}}==
{{works with|ALGOL 68|Standard - no extensions to language used}}
<!-- {{does not work with|ALGOL 68G|Any - tested with release mk15-0.8b.fc9.i386.}} -->
<!-- {{does not work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386 - ''get directory'' and'' grep in string'' not available in any library ... yet}} -->
Note: <tt>reidf</tt> does not appear to be included in [[ALGOL 68G]]. Also note that file names would be Operating System dependent.
<lang algol>
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")
)</lang>
=={{header|C}}==
=={{header|C}}==
{{works with|gcc|4.1.2 20061115 (prerelease) (SUSE Linux)}}
{{works with|gcc|4.1.2 20061115 (prerelease) (SUSE Linux)}}
Line 44: Line 72:
}
}
</lang>
</lang>

=={{header|ALGOL 68}}==
Note: <tt>reidf</tt> does not appear to be included in [[ALGOL 68G]]. Also note that file names would be Operating System dependent.
<pre>
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")
)
</pre>

=={{header|DOS Batch File}}==
=={{header|DOS Batch File}}==

ren input.txt output.txt
ren input.txt output.txt
ren \input.txt output.txt
ren \input.txt output.txt
Line 80: Line 79:


=={{header|Forth}}==
=={{header|Forth}}==

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


=={{header|Groovy}}==
=={{header|Groovy}}==

Using File
Using File
<pre>
<pre>
Line 105: Line 102:


=={{header|Haskell}}==
=={{header|Haskell}}==

import System.IO
import System.IO
import System.Directory
import System.Directory
Line 157: Line 153:


=={{header|Pascal}}==
=={{header|Pascal}}==

<lang pascal> var
<lang pascal> var
f : file ; // Untyped file
f : file ; // Untyped file
Line 202: Line 197:


=={{header|PowerShell}}==
=={{header|PowerShell}}==

Rename-Item input.txt output.txt
Rename-Item input.txt output.txt


Line 243: Line 237:


=={{header|Tcl}}==
=={{header|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 253: Line 246:


=={{header|Toka}}==
=={{header|Toka}}==

needs shell
needs shell
" input.txt" " output.txt" rename
" input.txt" " output.txt" rename
Line 262: Line 254:


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

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



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

Revision as of 03:23, 18 April 2009

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.

Ada

<lang ada> with Ada.Directories; use Ada.Directories;

  ...

Rename ("input.txt", "output.txt"); Rename ("docs", "mydocs"); Rename ("/input.txt", "/output.txt"); Rename ("/docs", "/mydocs"); </lang> The behavior depends on the concrete operating system regarding:

  • file name encoding issues;
  • file path notation (directory separator, directory syntax etc);
  • file extension syntax;
  • file system root (provided there is any).

ALGOL 68

Works with: ALGOL 68 version Standard - no extensions to language used

Note: reidf does not appear to be included in ALGOL 68G. Also note that file names would be Operating System dependent. <lang algol> 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")

)</lang>

C

Works with: gcc version 4.1.2 20061115 (prerelease) (SUSE Linux)

<lang c>#include <stdio.h>

int main() {

 rename("input.txt", "output.txt");
 rename("docs", "mydocs");
 rename("/input.txt", "/output.txt");
 rename("/docs", "/mydocs");
 return 0;

}</lang>

C++

Translation of: C

<lang cpp>

  1. include <cstdio>

int main() {

 std::rename("input.txt", "output.txt");
 std::rename("docs", "mydocs");
 std::rename("/input.txt", "/output.txt");
 std::rename("/docs", "/mydocs");

} </lang>

DOS Batch File

 ren input.txt output.txt
 ren \input.txt output.txt
 ren docs mydocs
 ren \docs mydocs

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

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"

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"

OCaml

Sys.rename "input.txt" "output.txt";;
Sys.rename "docs" "mydocs";;
Sys.rename "/input.txt" "/output.txt";;
Sys.rename "/docs" "/mydocs";;

Pascal

<lang pascal> var

   f : file ; // Untyped file
begin

 // as current directory
 AssignFile(f,'input.doc');
 Rename(f,'output,doc');

 // as root directory
 AssignFile(f,'\input.doc');
 Rename(f,'\output,doc');

 // rename a directory 
 AssignFile(f,'docs');
 Rename(f,'mydocs');

 //rename a directory off the root

 AssignFile(f,'\docs');
 Rename(f,'\mydocs');

end;</lang>

Perl

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

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.

PowerShell

Rename-Item input.txt output.txt
# The Rename-item has the alias ren
ren input.txt output.txt

Python

<lang python>

import os

os.rename("input.txt", "output.txt")
os.rename("docs", "mydocs")

os.rename("/input.txt", "/output.txt")
os.rename("/docs", "/mydocs")

</lang>

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

Smalltalk

<lang smalltalk>File rename: 'input.txt' to: 'output.txt'. File rename: 'docs' to: 'mydocs'. "as for other example, this works on systems

where the root is / ..."

File rename: '/input.txt' to: '/output.txt'. File rename: '/docs' to: '/mydocs'</lang>

Standard ML

OS.FileSys.rename {old = "input.txt", new = "output.txt"};
OS.FileSys.rename {old = "docs", new = "mydocs"};
OS.FileSys.rename {old = "/input.txt", new = "/output.txt"};
OS.FileSys.rename {old = "/docs", new = "/mydocs"};

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

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