Delete a file
You are encouraged to solve this task according to the task description, using any language you may know.
- Task
Delete a file called "input.txt" and delete a directory called "docs".
This should be done twice: once "here", i.e. in the current working directory and once in the filesystem root.
8th
<lang Forth> "input.txt" f:rm drop "/input.txt" f:rm drop "docs" f:rmdir drop "/docs" f:rmdir drop </lang> The 'drop' removes the result (true or false, indicating success or failure). It is not strictly necessary to do so, but it keeps the stack clean.
Ada
<lang ada>with Ada.Directories; use Ada.Directories;</lang> and then <lang ada>Delete_File ("input.txt"); Delete_File ("/input.txt"); Delete_Tree ("docs"); Delete_Tree ("/docs");</lang> Naming conventions for the file path are OS-specific. The language does not specify the encoding of the file paths, the directory separators or brackets, the file extension delimiter, the file version delimiter and syntax. The example provided works under Linux and Windows.
Aikido
The remove
function removes either a file or a directory (the directory must be empty for this to work). Exception is thrown if this fails.
<lang aikido>
remove ("input.txt")
remove ("/input.txt")
remove ("docs")
remove ("/docs")
</lang>
ALGOL 68
Note: scratch does not appear to do anything on ALGOL 68G. Also note that file names are Operating System dependent. <lang algol68>main:(
PROC remove = (STRING file name)INT: BEGIN FILE actual file; INT errno = open(actual file, file name, stand back channel); IF errno NE 0 THEN stop remove FI; scratch(actual file); # detach the book and burn it # errno EXIT stop remove: errno END; remove("input.txt"); remove("/input.txt"); remove("docs"); remove("/docs")
)</lang>
AutoHotkey
<lang AutoHotkey>FileDelete, input.txt FileDelete, \input.txt FileRemoveDir, docs, 1 FileRemoveDir, \docs, 1</lang>
with DllCall
Source: DeleteFile @github by jNizM <lang AutoHotkey>DeleteFile(lpFileName) {
DllCall("Kernel32.dll\DeleteFile", "Str", lpFileName)
}
DeleteFile("C:\Temp\TestFile.txt")</lang>
AWK
Assuming we are on a Unix/Linux or at least Cygwin system: <lang awk>system("rm input.txt") system("rm /input.txt") system("rm -rf docs") system("rm -rf /docs")</lang>
Axe
<lang axe>DelVar "appvINPUT"</lang>
Batch File
<lang dos>del input.txt rd /s /q docs
del \input.txt rd /s /q \docs</lang>
BASIC
Some versions of Qbasic may have had a builtin RMDIR command. However this is not documented in the manual, so we use the external MSDOS command in this example.
<lang qbasic> KILL "INPUT.TXT" KILL "C:\INPUT.TXT" SHELL "RMDIR /S /Q DIR" SHELL "RMDIR /S /Q C:\DIR" </lang>
ZX Spectrum Basic
The ZX Spectrum microdrive had only a main directory, and filenames did not have file extensions. Here we delete the file named INPUTTXT from the first microdrive:
<lang zxbasic> ERASE "m"; 1; "INPUTTXT" </lang>
And for disc drive of ZX Spectrum +3:
<lang zxbasic> ERASE "a:INPUTTXT" </lang>
BBC BASIC
If the names are known as constants at compile time: <lang bbcbasic>
*DELETE input.txt *DELETE \input.txt *RMDIR docs *RMDIR \docs
</lang> If the names are known only at run time: <lang BBC BASIC> OSCLI "DELETE " + file$
OSCLI "RMDIR " + dir$</lang>
C
ISO C: <lang c>#include <stdio.h>
int main() {
remove("input.txt"); remove("/input.txt"); remove("docs"); remove("/docs"); return 0;
}</lang>
POSIX: <lang c>#include <unistd.h>
int main() {
unlink("input.txt"); unlink("/input.txt"); rmdir("docs"); rmdir("/docs"); return 0;
}</lang>
C++
<lang cpp>#include <cstdio>
- include <direct.h>
int main() { remove( "input.txt" ); remove( "/input.txt" ); _rmdir( "docs" ); _rmdir( "/docs" );
return 0; }</lang>
C#
<lang csharp>using System; using System.IO;
namespace RosettaCode {
class Program { static void Main() { try { File.Delete("input.txt"); Directory.Delete("docs"); File.Delete(@"\input.txt"); Directory.Delete(@"\docs"); } catch (Exception exception) { Console.WriteLine(exception.Message); } } }
}</lang>
Clojure
<lang lisp>(import '(java.io File)) (.delete (File. "output.txt")) (.delete (File. "docs"))
(.delete (new File (str (File/separator) "output.txt"))) (.delete (new File (str (File/separator) "docs")))</lang>
COBOL
To delete files or directories in COBOL we need to use unofficial extensions. The following are built-in subroutines originally created as part of some of the COBOL products created by Micro Focus.
<lang cobol> IDENTIFICATION DIVISION.
PROGRAM-ID. Delete-Files.
PROCEDURE DIVISION. CALL "CBL_DELETE_FILE" USING "input.txt" CALL "CBL_DELETE_DIR" USING "docs" CALL "CBL_DELETE_FILE" USING "/input.txt" CALL "CBL_DELETE_DIR" USING "/docs"
GOBACK .</lang>
Alternate method of deleting files using the DELETE FILE
statement.
<lang cobol> IDENTIFICATION DIVISION.
PROGRAM-ID. Delete-Files-2.
ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT Local-File ASSIGN TO "input.txt". SELECT Root-File ASSIGN TO "/input.txt".
DATA DIVISION. FILE SECTION. FD Local-File. 01 Local-Record PIC X.
FD Root-File. 01 Root-Record PIC X.
PROCEDURE DIVISION. DELETE FILE Local-File DELETE FILE Root-File
GOBACK .</lang>
Common Lisp
<lang lisp>(delete-file (make-pathname :name "input.txt")) (delete-file (make-pathname :directory '(:absolute "") :name "input.txt"))</lang> To delete directories we need an implementation specific extension. In clisp this is ext:delete-dir.
<lang lisp>(let ((path (make-pathname :directory '(:relative "docs"))))
(ext:delete-dir path))
(let ((path (make-pathname :directory '(:absolute "docs"))))
(ext:delete-dir path))</lang>
Or you can use the portability library CL-FAD:
<lang lisp>(let ((path (make-pathname :directory '(:relative "docs"))))
(cl-fad:delete-directory-and-files path))</lang>
D
<lang d>import std.file: remove;
void main() {
remove("data.txt");
}</lang>
<lang d>import tango.io.Path;
void main() {
remove("input.txt"); remove("/input.txt"); remove("docs"); remove("/docs");
}</lang>
POSIX: <lang d>import tango.stdc.posix.unistd;
void main() {
unlink("input.txt"); unlink("/input.txt"); rmdir("docs"); rmdir("/docs");
}</lang>
Delphi
<lang e>procedure TMain.btnDeleteClick(Sender: TObject); var
CurrentDirectory : String;
begin
CurrentDirectory := GetCurrentDir;
DeleteFile(CurrentDirectory + '\input.txt'); RmDir(PChar(CurrentDirectory + '\docs'));
DeleteFile('c:\input.txt'); RmDir(PChar('c:\docs'));
end; </lang>
E
<lang e><file:input.txt>.delete(null) <file:docs>.delete(null) <file:///input.txt>.delete(null) <file:///docs>.delete(null)</lang>
Elena
<lang elena>#import system.
- import system'io.
- symbol program =
[
"output.txt" file_path delete. "\output.txt" file_path delete. "docs" directory_path delete. "\docs" directory_path delete.
].</lang>
Elixir
<lang elixir>File.rm!("input.txt") File.rmdir!("docs") File.rm!("/input.txt") File.rmdir!("/docs")</lang>
Erlang
<lang erlang> -module(delete). -export([main/0]).
main() -> % current directory
ok = file:del_dir( "docs" ),
ok = file:delete( "input.txt" ), % root directory ok = file:del_dir( "/docs" ), ok = file:delete( "/input.txt" ). </lang>
F#
<lang fsharp>open System.IO
[<EntryPoint>] let main argv =
let fileName = "input.txt" let dirName = "docs" for path in ["."; "/"] do ignore (File.Delete(Path.Combine(path, fileName))) ignore (Directory.Delete(Path.Combine(path, dirName))) 0</lang>
Factor
<lang factor>"docs" "/docs" [ delete-tree ] bi@ "input.txt" "/input.txt" [ delete-file ] bi@</lang>
Forth
There is no means to delete directories in ANS Forth. <lang forth> s" input.txt" delete-file throw s" /input.txt" delete-file throw</lang>
Fortran
I don't know a way of deleting directories in Fortran <lang fortran> OPEN (UNIT=5, FILE="input.txt", STATUS="OLD") ! Current directory
CLOSE (UNIT=5, STATUS="DELETE") OPEN (UNIT=5, FILE="/input.txt", STATUS="OLD") ! Root directory CLOSE (UNIT=5, STATUS="DELETE")</lang>
FreeBASIC
<lang freebasic>' FB 1.05.0 Win64
' delete file and empty sub-directory in current directory
Kill "input.txt" RmDir "docs"
' delete file and empty sub-directory in root directory c:\ ' deleting file in root requires administrative privileges in Windows 10
'Kill "c:\input.txt" 'RmDir "c:\docs"
Print "Press any key to quit" Sleep </lang>
GAP
<lang gap># Apparently GAP can only remove a file, not a directory RemoveFile("input.txt");
- true
RemoveFile("docs");
- fail</lang>
Go
<lang go>package main import "os"
func main() {
os.Remove("input.txt") os.Remove("/input.txt") os.Remove("docs") os.Remove("/docs") // recursively removes contents: os.RemoveAll("docs") os.RemoveAll("/docs")
}</lang>
Groovy
On most *nix systems, this must be run as sudo for the files in root to be deleted. If you don't have permissions, it will silently fail to delete those files. I would recommend against running anything you find on the internet as sudo.
<lang groovy>// Gets the first filesystem root. On most systems this will be / or c:\ def fsRoot = File.listRoots().first()
// Create our list of files (including directories) def files = [
new File("input.txt"), new File(fsRoot, "input.txt"), new File("docs"), new File(fsRoot, "docs")
]
/* We use it.directory to determine whether each file is a regular file or directory. If it is a directory, we delete it with deleteDir(), otherwise we just use delete().
*/
files.each{
it.directory ? it.deleteDir() : it.delete()
}</lang>
Haskell
<lang haskell>import System.IO import System.Directory
main = do
removeFile "output.txt" removeDirectory "docs" removeFile "/output.txt" removeDirectory "/docs"</lang>
HicEst
<lang hicest>SYSTEM(DIR="docs") ! create docs in current directory (if not existent), make it current OPEN (FILE="input.txt", "NEW") ! in current directory = docs WRITE(FIle="input.txt", DELETE=1) ! no command to DELETE a DIRECTORY in HicEst
SYSTEM(DIR="C:\docs") ! create C:\docs (if not existent), make it current OPEN (FILE="input.txt", "NEW") ! in current directory = C:\docs WRITE(FIle="input.txt", DELETE=1)</lang>
Io
<lang io>Directory fileNamed("input.txt") remove Directory directoryNamed("docs") remove RootDir := Directory clone setPath("/") RootDir fileNamed("input.txt") remove RootDir directoryNamed("docs") remove</lang>
or <lang io>File with("input.txt") remove Directory with("docs") remove File with("/input.txt") remove Directory with("/docs") remove</lang>
Icon and Unicon
Icon supports 'remove' for files. <lang Unicon>every dir := !["./","/"] do {
remove(f := dir || "input.txt") |stop("failure for file remove ",f) rmdir(f := dir || "docs") |stop("failure for directory remove ",f) }
</lang> Note Icon and Unicon accept both / and \ for directory separators.
J
The J standard library comes with a set of file access utilities. <lang j> load 'files'
ferase 'input.txt' ferase '\input.txt' ferase 'docs' ferase '\docs'
NB. Or all at once...
ferase 'input.txt';'/input.txt';'docs';'/docs'</lang>
The function above actually uses a foreign conjunction and defined in the files library like so: <lang j>NB. ========================================================= NB.*ferase v erases a file NB. Returns 1 if successful, otherwise _1 ferase=: (1!:55 :: _1:) @ (fboxname &>) @ boxopen</lang>
This means that you can directly erase files and directories without loading the files library. <lang j>1!:55 <'input.txt' 1!:55 <'\input.txt' 1!:55 <'docs' 1!:55 <'\docs'</lang>
Java
<lang java>import java.io.File; public class FileDeleteTest {
public static boolean deleteFile(String filename) { boolean exists = new File(filename).delete(); return exists; } public static void test(String type, String filename) { System.out.println("The following " + type + " called " + filename + (deleteFile(filename) ? " was deleted." : " could not be deleted.") ); } public static void main(String args[]) { test("file", "input.txt"); test("file", File.seperator + "input.txt"); test("directory", "docs"); test("directory", File.seperator + "docs" + File.seperator); }
}</lang>
JavaScript
<lang javascript>var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.DeleteFile('input.txt'); fso.DeleteFile('c:/input.txt');
fso.DeleteFolder('docs'); fso.DeleteFolder('c:/docs');</lang>
or
<lang javascript>var fso = new ActiveXObject("Scripting.FileSystemObject"); var f; f = fso.GetFile('input.txt'); f.Delete(); f = fso.GetFile('c:/input.txt'); f.Delete(); f = fso.GetFolder('docs'); f.Delete(); f = fso.GetFolder('c:/docs'); f.Delete();</lang>
Synchronous <lang javascript>const fs = require('fs'); fs.unlinkSync('myfile.txt');</lang> Asynchronous <lang javascript>const fs = require('fs'); fs.unlink('myfile.txt', ()=>{
console.log("Done!");
})</lang>
LabVIEW
This image is a VI Snippet, an executable image of LabVIEW code. The LabVIEW version is shown on the top-right hand corner. You can download it, then drag-and-drop it onto the LabVIEW block diagram from a file browser, and it will appear as runnable, editable code.
Lasso
<lang Lasso>// delete file local(f = file('input.txt'))
- f->delete
// delete directory // directory must be empty before it can be successfully deleted. A failure is generated if the operation fails. local(d = dir('docs'))
- d->delete
// delete file in root file system (requires permissions at user OS level) local(f = file('//input.txt'))
- f->delete
// delete directory in root file system (requires permissions at user OS level) // directory must be empty before it can be successfully deleted. A failure is generated if the operation fails. local(d = file('//docs'))
- d->delete</lang>
Liberty BASIC
<lang lb>' show where we are print DefaultDir$
' in here kill "input.txt" result=rmdir("Docs")
' from root kill "\input.txt" result=rmdir("\Docs") </lang>
Lingo
Delete file "input.txt" in cwd: <lang lingo>-- note: fileIO xtra is shipped with Director, i.e. an "internal" fp = xtra("fileIO").new() fp.openFile("input.txt", 0) fp.delete()</lang>
Delete file "input.txt" in root of current volume: <lang lingo>-- note: fileIO xtra is shipped with Director, i.e. an "internal" pd = the last char of _movie.path -- "\" for win, ":" for mac _player.itemDelimiter = pd vol = _movie.path.item[1] fp = xtra("fileIO").new() fp.openFile(vol&pd&"input.txt", 0) fp.delete()</lang>
Deleting a directory requires a 3rd party xtra, but there are various free xtras that allow this. Here as example usage of BinFile xtra:
<lang lingo>-- delete (empty) directory "docs" in cwd bx_folder_delete("docs")
-- delete (empty) directory "docs" in root of current volume pd = the last char of _movie.path -- "\" for win, ":" for mac _player.itemDelimiter = pd vol = _movie.path.item[1] bx_folder_delete(vol&pd&"docs")</lang>
Locomotive Basic
<lang locobasic>|era,"input.txt"</lang> (AMSDOS RSX command, therefore prefixed with a vertical bar. Also, there are no subdirectories in AMSDOS.)
Logo
UCB Logo has no means to delete directories. <lang logo>erasefile "input.txt erasefile "/input.txt</lang>
Lua
<lang lua>os.remove("input.txt") os.remove("/input.txt") os.remove("docs") os.remove("/docs")</lang>
Maple
<lang Maple>FileTools:-Remove("input.txt"); FileTools:-RemoveDirectory("docs"); FileTools:-Remove("/input.txt"); FileTools:-RemoveDirectory("/docs"); </lang>
Mathematica / Wolfram Language
<lang Mathematica>wd = NotebookDirectory[]; DeleteFile[wd <> "input.txt"] DeleteFile["/" <> "input.txt"] DeleteDirectory[wd <> "docs"] DeleteDirectory["/" <> "docs"]</lang>
MATLAB / Octave
<lang Matlab> delete('input.txt'); % delete local file input.txt
delete('/input.txt'); % delete file /input.txt rmdir('docs'); % remove local directory docs rmdir('/docs'); % remove directory /docs </lang>
On Unix-Systems: <lang matlab>if system('rm input.txt') == 0
disp('input.txt removed')
end if system('rm /input.txt') == 0
disp('/input.txt removed')
end if system('rmdir docs') == 0
disp('docs removed')
end if system('rmdir /docs') == 0
disp('/docs removed')
end</lang>
MAXScript
There's no way to delete folders in MAXScript <lang maxscript>-- Here deleteFile "input.txt" -- Root deleteFile "\input.txt"</lang>
Mercury
<lang mercury>:- module delete_file.
- - interface.
- - import_module io.
- - pred main(io::di, io::uo) is det.
- - implementation.
main(!IO) :-
io.remove_file("input.txt", _, !IO), io.remove_file("/input.txt", _, !IO), io.remove_file("docs", _, !IO), io.remove_file("/docs", _, !IO).</lang>
Nemerle
<lang Nemerle>using System; using System.IO; using System.Console;
module DeleteFile {
Main() : void { when (File.Exists("input.txt")) File.Delete("input.txt"); try { when (File.Exists(@"\input.txt")) File.Delete(@"\input.txt"); } catch { |e is UnauthorizedAccessException => WriteLine(e.Message) } when (Directory.Exists("docs")) Directory.Delete("docs"); when (Directory.Exists(@"\docs")) Directory.Delete(@"\docs"); }
}</lang>
NetRexx
<lang NetRexx>/* NetRexx */ options replace format comments java crossref symbols binary
runSample(arg) return
-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . method isFileDeleted(fn) public static returns boolean
ff = File(fn) fDeleted = ff.delete() return fDeleted
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ method runSample(arg) private static
parse arg files if files = then files = 'input.txt F docs D /input.txt F /docs D' loop while files.length > 0 parse files fn ft files select case(ft.upper()) when 'F' then do ft = 'File' end when 'D' then do ft = 'Directory' end otherwise do ft = 'File' end end if isFileDeleted(fn) then dl = 'deleted' else dl = 'not deleted' say ft 'fn' dl end
return
</lang>
NewLISP
<lang NewLISP>(delete-file "input.txt") (delete-file "/input.txt") (remove-dir "docs") (remove-dir "/docs")</lang>
Nim
<lang Nim>import os removeFile("input.txt") removeFile("/input.txt") removeDir("docs") removeDir("/docs")</lang>
Objective-C
<lang objc>NSFileManager *fm = [NSFileManager defaultManager];
// Pre-OS X 10.5 [fm removeFileAtPath:@"input.txt" handler:nil]; [fm removeFileAtPath:@"/input.txt" handler:nil]; [fm removeFileAtPath:@"docs" handler:nil]; [fm removeFileAtPath:@"/docs" handler:nil];
// OS X 10.5+ [fm removeItemAtPath:@"input.txt" error:NULL]; [fm removeItemAtPath:@"/input.txt" error:NULL]; [fm removeItemAtPath:@"docs" error:NULL]; [fm removeItemAtPath:@"/docs" error:NULL];</lang>
Objeck
<lang objeck> use IO;
bundle Default {
class FileExample { function : Main(args : String[]) ~ Nil { File->Delete("output.txt"); File->Delete("/output.txt"); Directory->Delete("docs"); Directory->Delete("/docs"); } }
} </lang>
OCaml
<lang ocaml>Sys.remove "input.txt";; Sys.remove "/input.txt";;</lang>
with the Unix library: <lang ocaml>#load "unix.cma";; Unix.unlink "input.txt";; Unix.unlink "/input.txt";; Unix.rmdir "docs";; Unix.rmdir "/docs";;</lang>
ooRexx
<lang oorexx>/*REXX pgm deletes a file */ file= 'afile.txt' /*name of a file to be deleted.*/ res=sysFileDelete(file); Say file 'res='res File= 'bfile.txt' /*name of a file to be deleted.*/ res=sysFileDelete(file); Say file 'res='res</lang>
- Output:
afile.txt res=0 bfile.txt res=2
Oz
<lang oz>for Dir in ["/" "./"] do
try {OS.unlink Dir#"output.txt"} catch _ then {System.showInfo "File does not exist."} end try {OS.rmDir Dir#"docs"} catch _ then {System.showInfo "Directory does not exist."} end
end</lang>
PARI/GP
GP has no built-in facilities for deleting files, but can use a system call: <lang parigp>system("rm -rf docs"); system("rm input.txt"); system("rm -rf /docs"); system("rm /input.txt");</lang> PARI, as usual, has access to all the standard C methods.
Pascal
See Delphi
Perl
<lang perl>use File::Spec::Functions qw(catfile rootdir);
- here
unlink 'input.txt'; rmdir 'docs';
- root dir
unlink catfile rootdir, 'input.txt'; rmdir catfile rootdir, 'docs';</lang>
Without Perl Modules
Current directory
perl -e 'unlink input.txt' perl -e 'rmdir docs'
Root Directory
perl -e 'unlink "/input.txt"' perl -e 'rmdir "/docs"'
Perl 6
<lang perl>unlink 'input.txt'; unlink '/input.txt'; rmdir 'docs'; rmdir '/docs';</lang>
PHP
<lang php><?php unlink('input.txt'); unlink('/input.txt'); rmdir('docs'); rmdir('/docs'); ?></lang>
PicoLisp
<lang PicoLisp>(call 'rm "input.txt") (call 'rmdir "docs") (call 'rm "/input.txt") (call 'rmdir "/docs")</lang>
Pike
<lang pike>int main(){
rm("input.txt"); rm("/input.txt"); rm("docs"); rm("/docs");
}</lang>
PowerShell
<lang powershell># possible aliases for Remove-Item: rm, del, ri Remove-Item input.txt Remove-Item \input.txt # file system root
Remove-Item -Recurse docs # recurse for deleting folders including content Remove-Item -Recurse \docs</lang>
ProDOS
Because input.txt is located inside of "docs" this will delete it when it deletes "docs" <lang ProDOS>deletedirectory docs</lang>
PureBasic
<lang PureBasic>DeleteFile("input.txt") DeleteDirectory("docs","") ; needs to delete all included files DeleteFile("/input.txt") DeleteDirectory("/docs","*.*") ; deletes all files according to a pattern
DeleteDirectory("/docs","",#PB_FileSystem_Recursive) ; deletes all files and directories recursive</lang>
Python
<lang python>import os
- current directory
os.remove("output.txt") os.rmdir("docs")
- root directory
os.remove("/output.txt") os.rmdir("/docs")</lang> If you wanted to remove a directory and all its contents, recursively, you would do: <lang python>import shutil shutil.rmtree("docs")</lang>
R
<lang R>file.remove("input.txt") file.remove("/input.txt")
- or
file.remove("input.txt", "/input.txt")
- or
unlink("input.txt"); unlink("/input.txt")
- directories needs the recursive flag
unlink("docs", recursive = TRUE) unlink("/docs", recursive = TRUE)</lang>
The function unlink allows wildcards (* and ?)
Racket
<lang Racket>
- lang racket
- here
(delete-file "input.txt") (delete-directory "docs") (delete-directory/files "docs") ; recursive deletion
- in the root
(delete-file "/input.txt") (delete-directory "/docs") (delete-directory/files "/docs")
- or in the root with relative paths
(parameterize ([current-directory "/"])
(delete-file "input.txt") (delete-directory "docs") (delete-directory/files "docs"))
</lang>
Raven
<lang raven>'input.txt' delete '/input.txt' delete 'docs' rmdir '/docs' rmdir</lang>
REBOL
<lang REBOL>; Local. delete %input.txt delete-dir %docs/
- Root.
delete %/input.txt delete-dir %/docs/</lang>
Retro
<lang Retro>with files' "input.txt" delete "/input.txt" delete</lang>
REXX
Note that this REXX program will work on the Next family of Microsoft Windows systems as well as DOS (both under Windows in a DOS-prompt window or stand-alone DOS). <lang rexx>/*REXX program deletes a file and a folder in the current directory and the root. */ trace off /*suppress REXX error messages from DOS*/ aFile= 'input.txt' /*name of a file to be deleted. */ aDir = 'docs' /*name of a folder to be removed. */
do j=1 for 2 /*perform this DO loop exactly twice.*/ 'ERASE' aFile /*erase this file in the current dir. */ 'RMDIR' "/s /q" aDir /*remove the folder " " " " */ if j==1 then 'CD \' /*make the current dir the root dir.*/ end /* [↑] just do CD \ command once.*/ /*stick a fork in it, we're all done. */</lang>
Ring
<lang ring> remove("output.txt") system("rmdir docs") </lang>
Ruby
<lang ruby>File.delete("output.txt", "/output.txt") Dir.delete("docs") Dir.delete("/docs")</lang>
Run BASIC
<lang runbasic>'------ delete input.txt ---------------- kill "input.txt" ' this is where we are kill "/input.txt" ' this is the root
' ---- delete directory docs ---------- result = rmdir("Docs") ' directory where we are result = rmdir("/Docs") ' root directory</lang>
Scala
<lang scala>import java.util._ import java.io.File
object FileDeleteTest extends App {
def deleteFile(filename: String) = { new File(filename).delete() }
def test(typ: String, filename: String) = { System.out.println("The following " + typ + " called " + filename + (if (deleteFile(filename)) " was deleted." else " could not be deleted.")) } test("file", "input.txt") test("file", File.separatorChar + "input.txt") test("directory", "docs") test("directory", File.separatorChar + "docs" + File.separatorChar)
}</lang>
Scheme
<lang scheme>(delete-file filename)</lang>
Seed7
The library osfiles.s7i provides the functions removeFile and removeTree. RemoveFile removes a file of any type unless it is a directory that is not empty. RemoveTree remove a file of any type inclusive a directory tree. Note that removeFile and removeTree fail with the exception FILE_ERROR when the file does not exist. <lang seed7>$ include "seed7_05.s7i";
include "osfiles.s7i";
const proc: main is func
begin removeFile("input.txt"); removeFile("/input.txt"); removeTree("docs"); removeTree("/docs"); end func;</lang>
Sidef
<lang ruby># here %f'input.txt' -> delete; %d'docs' -> delete;
- root dir
Dir.root + %f'input.txt' -> delete; Dir.root + %d'docs' -> delete;</lang>
Slate
(It will succeed deleting the directory if it is empty)
<lang slate>(File newNamed: 'input.txt') delete. (File newNamed: '/input.txt') delete. (Directory newNamed: 'docs') delete. (Directory newNamed: '/docs') delete.</lang>
Also:
<lang slate> (Directory current / 'input.txt') delete. (Directory root / 'input.txt') delete.</lang>
Smalltalk
(It will succeed deleting the directory if it is empty)
<lang smalltalk>File remove: 'input.txt'. File remove: 'docs'. File remove: '/input.txt'. File remove: '/docs'</lang>
Standard ML
<lang sml>OS.FileSys.remove "input.txt"; OS.FileSys.remove "/input.txt"; OS.FileSys.rmDir "docs"; OS.FileSys.rmDir "/docs";</lang>
Tcl
<lang tcl>file delete input.txt /input.txt
- preserve directory if non-empty
file delete docs /docs
- delete even if non-empty
file delete -force docs /docs</lang>
Toka
<lang toka>needs shell " docs" remove " input.txt" remove</lang>
TUSCRIPT
<lang tuscript> $$ MODE TUSCRIPT - delete file SET status = DELETE ("input.txt") - delete directory SET status = DELETE ("docs",-std-) </lang>
UNIX Shell
<lang bash>rm -rf docs rm input.txt rm -rf /docs rm /input.txt</lang>
Ursa
<lang ursa>decl file f f.delete "input.txt" f.delete "docs" f.delete "/input.txt" f.delete "/docs"</lang>
Vedit macro language
Vedit allows using either '\' or '/' as directory separator character, it is automatically converted to the one used by the operating system. <lang vedit>// In current directory File_Delete("input.txt", OK) File_Rmdir("docs")
// In the root directory File_Delete("/input.txt", OK) File_Rmdir("/docs")</lang>
VBScript
<lang vb>Set oFSO = CreateObject( "Scripting.FileSystemObject" )
oFSO.DeleteFile "input.txt" oFSO.DeleteFolder "docs"
oFSO.DeleteFile "\input.txt" oFSO.DeleteFolder "\docs"
'Using Delete on file and folder objects
dim fil, fld
set fil = oFSO.GetFile( "input.txt" ) fil.Delete set fld = oFSO.GetFolder( "docs" ) fld.Delete
set fil = oFSO.GetFile( "\input.txt" ) fil.Delete set fld = oFSO.GetFolder( "\docs" ) fld.Delete
</lang>
Visual Basic .NET
Platform: .NET
<lang vbnet>'Current Directory IO.Directory.Delete("docs") IO.Directory.Delete("docs", True) 'also delete files and sub-directories IO.File.Delete("output.txt")
'Root IO.Directory.Delete("\docs") IO.File.Delete("\output.txt")
'Root, platform independent IO.Directory.Delete(IO.Path.DirectorySeparatorChar & "docs") IO.File.Delete(IO.Path.DirectorySeparatorChar & "output.txt")</lang>
X86 Assembly
<lang asm>
- syscall numbers for readability.
- ]
%define sys_rmdir 40 %define sys_unlink 10
section .text global _start
_start: mov ebx, fn mov eax, sys_unlink int 0x80 test eax, eax js _ragequit
mov ebx, dn mov eax, sys_rmdir int 0x80
mov ebx, rfn mov eax, sys_unlink int 0x80 cmp eax, 0 je _exit
_ragequit: mov edx, err_len mov ecx, err_msg mov ebx, 4 mov eax ,1 int 0x80
_exit: push 0x1 mov eax, 1 push eax int 0x80 ret
section .data fn db 'input.txt',0 rfn db '/input.txt',0 dn db 'doc',0
err_msg db "Something went wrong! :[",0xa err_len equ $-err_msg </lang>
Yorick
Yorick does not have a built-in function to recursively delete a directory; the rmdir function only works on empty directories. <lang yorick>remove, "input.txt"; remove, "/input.txt"; rmdir, "docs"; rmdir, "/docs";</lang>
zkl
zkl doesn't have built ins to delete files or directories but you can let a shell do it: <lang zkl>zkl: System.cmd((System.isWindows and "del" or "unlink") + " input.txt") 0 zkl: System.cmd((System.isWindows and "del" or "unlink") + " /input.txt") unlink: cannot unlink ‘/input.txt’: No such file or directory 256 zkl: System.cmd("rmdir docs") rmdir: failed to remove ‘docs’: Directory not empty 256 zkl: System.cmd("rm -r docs") 0 zkl: System.cmd("rm -r /docs") rm: cannot remove ‘/docs’: No such file or directory 256</lang>
- Programming Tasks
- File System Operations
- 8th
- Ada
- Aikido
- ALGOL 68
- AutoHotkey
- AWK
- Axe
- Batch File
- BASIC
- ZX Spectrum Basic
- BBC BASIC
- C
- C++
- C sharp
- Clojure
- COBOL
- Common Lisp
- CL-FAD
- D
- Tango
- Delphi
- E
- Elena
- Elixir
- Erlang
- F Sharp
- Factor
- Forth
- Fortran
- FreeBASIC
- GAP
- Go
- Groovy
- Haskell
- HicEst
- Io
- Icon
- Unicon
- J
- Java
- JavaScript
- LabVIEW
- LabVIEW CWD
- Lasso
- Liberty BASIC
- Lingo
- Locomotive Basic
- Logo
- Lua
- Maple
- Mathematica
- Wolfram Language
- MATLAB
- Octave
- MAXScript
- Mercury
- Nemerle
- NetRexx
- NewLISP
- Nim
- Objective-C
- Objeck
- OCaml
- OoRexx
- Oz
- PARI/GP
- Pascal
- Perl
- Perl 6
- PHP
- PicoLisp
- Pike
- PowerShell
- ProDOS
- PureBasic
- Python
- R
- Racket
- Raven
- REBOL
- Retro
- REXX
- Ring
- Ruby
- Run BASIC
- Scala
- Scheme
- Seed7
- Sidef
- Slate
- Smalltalk
- Standard ML
- Tcl
- Toka
- TUSCRIPT
- UNIX Shell
- Ursa
- Vedit macro language
- VBScript
- Visual Basic .NET
- X86 Assembly
- Yorick
- Zkl
- Befunge/Omit
- HTML/Omit
- Openscad/Omit
- TI-83 BASIC/Omit
- TI-89 BASIC/Omit