Rename a file: Difference between revisions
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). |
||
⚫ | |||
{{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}} --> |
|||
⚫ | |||
<lang algol> |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
)</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> |
||
⚫ | |||
⚫ | |||
<pre> |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
) |
|||
</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
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
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
<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++
<lang cpp>
- 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
'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")