Empty directory: Difference between revisions

m
→‎{{header|Wren}}: Changed to Wren S/H
m (→‎{{header|Wren}}: Changed to Wren S/H)
 
(65 intermediate revisions by 36 users not shown)
Line 4:
An empty directory contains no files nor subdirectories.
With [[Unix]] or [[Windows]] systems, every directory contains an entry for “<code>.</code>” and almost every directory contains “<code>..</code>” (except for a root directory); an empty directory contains no other entries.
 
=={{header|11l}}==
<syntaxhighlight lang="11l">I fs:list_dir(input()).empty
print(‘empty’)
E
print(‘not empty’)</syntaxhighlight>
 
=={{header|8086 Assembly}}==
{{trans|MS-DOS}}
 
<syntaxhighlight lang="asm">; this routine attempts to remove the directory and returns an error code if it cannot.
 
mov ax,seg dirname ;load into AX the segment where dirname is stored.
mov ds,ax ;load the segment register DS with the segment of dirname
mov dx,offset dirname ;load into DX the offset of dirname
mov ah,39h ;0x39 is the interrupt code for remove directory
int 21h ;sets carry if error is encountered. error code will be in AX.
;If carry is clear the remove was successful
 
jc error
 
mov ah,4Ch ;return function
mov al,0 ;required return code
int 21h ;return to DOS
 
error: ;put your error handler here
 
mov ah,4Ch ;return function
mov al,0 ;required return code
int 21h ;return to DOS
 
 
dirname db "GAMES",0</syntaxhighlight>
 
=={{header|Ada}}==
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO; use Ada.Text_IO;
with Ada.Directories;
procedure EmptyDir is
Line 29 ⟶ 62:
Put_Line (Empty ("./emptydir.adb"));
Put_Line (Empty ("./foobar"));
end EmptyDir;</langsyntaxhighlight>
{{out}}
<pre>Not empty
Line 40 ⟶ 73:
This uses the "argc", "argv", "file is directory" and "get directory" procedures specific to Algol 68 G.
<br>Note the Algol 68 G interpreter processes the command line parameters before "-" so this example expects the directory names to follow "-".
<langsyntaxhighlight lang="algol68"># returns TRUE if the specified directory is empty, FALSE if it doesn't exist or is non-empty #
PROC is empty directory = ( STRING directory )BOOL:
IF NOT file is directory( directory )
Line 71 ⟶ 104:
print( ( argv( i ), " is ", IF is empty directory( argv( i ) ) THEN "empty" ELSE "not empty" FI, newline ) )
FI
OD</langsyntaxhighlight>
{{out}}
<pre>
Line 79 ⟶ 112:
\zz is empty
</pre>
 
=={{header|Arturo}}==
 
<syntaxhighlight lang="rebol">emptyDir?: function [folder]-> empty? list folder
 
print emptyDir? "."</syntaxhighlight>
 
{{out}}
 
<pre>false</pre>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight lang="autohotkey">MsgBox % isDir_empty(A_ScriptDir)?"true":"false"
 
isDir_empty(p) {
Line 87 ⟶ 130:
return 0
return 1
}</langsyntaxhighlight>
{{out}}
<pre>false</pre>
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
# syntax: GAWK -f EMPTY_DIRECTORY.AWK
BEGIN {
n = split("C:\\TEMP3,C:\\NOTHERE,C:\\AWK\\FILENAME,C:\\WINDOWS",arr,",")
for (i=1; i<=n; i++) {
printf("'%s' %s\n",arr[i],is_dir(arr[i]))
}
exit(0)
}
function is_dir(path, cmd,dots,entries,msg,rec,valid_dir) {
cmd = sprintf("DIR %s 2>NUL",path) # MS-Windows
while ((cmd | getline rec) > 0) {
if (rec ~ /[0-9]:[0-5][0-9]/) {
if (rec ~ / (\.|\.\.)$/) { # . or ..
dots++
continue
}
entries++
}
if (rec ~ / Dir\(s\) .* bytes free$/) {
valid_dir = 1
}
}
close(cmd)
if (valid_dir == 0) {
msg = "does not exist"
}
else if (valid_dir == 1 && entries == 0) {
msg = "is an empty directory"
}
else if (dots == 0 && entries == 1) {
msg = "is a file"
}
else {
msg = sprintf("is a directory with %d entries",entries)
}
return(msg)
}
</syntaxhighlight>
{{out}}
<pre>
'C:\TEMP3' is an empty directory
'C:\NOTHERE' does not exist
'C:\AWK\FILENAME' is a file
'C:\WINDOWS' is a directory with 98 entries
</pre>
 
=={{header|BASIC}}==
==={{header|BaCon}}===
<syntaxhighlight lang="basic">FUNCTION check$(dir$)
 
IF FILEEXISTS(dir$) THEN
RETURN IIF$(LEN(WALK$(dir$, 127, ".+", FALSE)), " is NOT empty.", " is empty." )
ELSE
RETURN " doesn't exist."
ENDIF
 
ENDFUNCTION
 
dir$ = "bla"
PRINT "Directory '", dir$, "'", check$(dir$)
 
dir$ = "/mnt"
PRINT "Directory '", dir$, "'", check$(dir$)
 
dir$ = "."
PRINT "Directory '", dir$, "'", check$(dir$)</syntaxhighlight>
 
{{out}}
<pre>Directory 'bla' doesn't exist.
Directory '/mnt' is empty.
Directory '.' is NOT empty.</pre>
 
=={{header|Batch File}}==
Line 97 ⟶ 214:
*2 - input directory does not exist.
*3 - input not found.
<langsyntaxhighlight lang="dos">@echo off
if "%~1"=="" exit /b 3
set "samp_path=%~1"
Line 126 ⟶ 243:
:folder_not_found
echo Folder not found.
exit /b 2</langsyntaxhighlight>
{{Out|Sample Session}}
(Saved the Batch File as IsEmpty.Bat in C:\)
Line 158 ⟶ 275:
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang="bbcbasic"> IF FNisdirectoryempty("C:\") PRINT "C:\ is empty" ELSE PRINT "C:\ is not empty"
IF FNisdirectoryempty("C:\temp") PRINT "C:\temp is empty" ELSE PRINT "C:\temp is not empty"
END
Line 174 ⟶ 291:
UNTIL res% == 0
SYS "FindClose", sh%
= (res% == 0)</langsyntaxhighlight>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <dirent.h>
#include <string.h>
Line 216 ⟶ 333:
 
return 0;
}</langsyntaxhighlight>Running it:<pre>
% mkdir stuff; ./a.out /usr/ ./stuff /etc/passwd
/usr/: not empty
Line 223 ⟶ 340:
</pre>
 
=={{header|C++ sharp|C#}}==
<syntaxhighlight lang="csharp">using System;
{{libheader|Boost}}
<lang cpp>
#include <iostream>
#include <boost/filesystem.hpp>
 
using namespace boost::filesystem;
 
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; ++i) {
path p(argv[i]);
 
if (exists(p) && is_directory(p))
std::cout << "'" << argv[i] << "' is" << (!is_empty(p) ? " not" : "") << " empty\n";
else
std::cout << "dir '" << argv[i] << "' could not be found\n";
}
}
</lang>
 
=={{header|C sharp}}==
<lang csharp>using System;
using System.IO;
 
Line 264 ⟶ 360:
}
}
</syntaxhighlight>
</lang>
Running it:<pre>
Assume c:\temp exists and is not empty, c:\temp\empty exists and is empty
Line 272 ⟶ 368:
'c:\temp\empty' is empty
</pre>
 
=={{header|C++}}==
{{libheader|Boost}}
<syntaxhighlight lang="cpp">
#include <iostream>
#include <boost/filesystem.hpp>
 
using namespace boost::filesystem;
 
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; ++i) {
path p(argv[i]);
 
if (exists(p) && is_directory(p))
std::cout << "'" << argv[i] << "' is" << (!is_empty(p) ? " not" : "") << " empty\n";
else
std::cout << "dir '" << argv[i] << "' could not be found\n";
}
}
</syntaxhighlight>
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="clojure">(require '[clojure.java.io :as io])
(defn empty-dir? [path]
(let [file (io/file path)]
(assert (.exists file))
(assert (.isDirectory file))
(-> file .list empty?))) ; .list ignores "." and ".."</langsyntaxhighlight>
 
 
=={{header|CoffeeScript}}==
<langsyntaxhighlight lang="coffeescript">
fs = require 'fs'
 
Line 291 ⟶ 407:
fns = fs.readdirSync dir
fns.length == 0
</syntaxhighlight>
</lang>
 
=={{header|Common Lisp}}==
Will also return <code>T</code> if <code>path</code> doesn't exist.
<langsyntaxhighlight lang="lisp">
(defun empty-directory-p (path)
(and (null (directory (concatenate 'string path "/*")))
(null (directory (concatenate 'string path "/*/")))))
</syntaxhighlight>
</lang>
 
=={{header|D}}==
 
<langsyntaxhighlight lang="d">import std.stdio, std.file;
 
void main() {
Line 314 ⟶ 430:
throw new Exception("dir not found: " ~ dirname);
return dirEntries(dirname, SpanMode.shallow).empty;
}</langsyntaxhighlight>
<pre>somedir is empty: false</pre>
=={{header|Delphi}}==
{{libheader| System.SysUtils}}
{{libheader| System.IOUtils}}
{{Trans|C#}}
<syntaxhighlight lang="delphi">
program Empty_directory;
 
{$APPTYPE CONSOLE}
 
uses
System.SysUtils,
System.IOUtils;
 
function IsDirectoryEmpty(dir: string): Boolean;
var
count: Integer;
begin
count := Length(TDirectory.GetFiles(dir)) + Length(TDirectory.GetDirectories(dir));
Result := count = 0;
end;
 
var
i: Integer;
 
const
CHECK: array[Boolean] of string = (' is not', ' is');
 
begin
if ParamCount > 0 then
for i := 1 to ParamCount do
Writeln(ParamStr(i), CHECK[IsDirectoryEmpty(ParamStr(i))], ' empty');
Readln;
end.</syntaxhighlight>
{{out}}
The same of c#.
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">path = hd(System.argv)
IO.puts File.dir?(path) and Enum.empty?( File.ls!(path) )</langsyntaxhighlight>
 
=={{header|Erlang}}==
Line 336 ⟶ 486:
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">open System.IO
let isEmptyDirectory x = (Directory.GetFiles x).Length = 0 && (Directory.GetDirectories x).Length = 0</langsyntaxhighlight>
 
=={{header|Factor}}==
<syntaxhighlight lang="factor">USE: io.directories
: empty-directory? ( path -- ? ) directory-entries empty? ;</syntaxhighlight>
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
#Include "dir.bi"
 
Function IsDirEmpty(dirPath As String) As Boolean
Err = 0
' check dirPath is a valid directory
Dim As String fileName = Dir(dirPath, fbDirectory)
If Len(fileName) = 0 Then
Err = 1000 ' dirPath is not a valid path
Return False
End If
' now check if there are any files/subdirectories in it other than . and ..
Dim fileSpec As String = dirPath + "\*.*"
Const attribMask = fbNormal Or fbHidden Or fbSystem Or fbDirectory
Dim outAttrib As UInteger
fileName = Dir(fileSpec, attribMask, outAttrib) ' get first file
Do
If fileName <> ".." AndAlso fileName <> "." Then
If Len(fileName) = 0 Then Return True
Exit Do
End If
fileName = Dir ' get next file
Loop
Return False
End Function
 
Dim outAttrib As UInteger
Dim dirPath As String = "c:\freebasic\docs" ' known to be empty
Dim empty As Boolean = IsDirEmpty(dirPath)
Dim e As Long = Err
If e = 1000 Then
Print "'"; dirPath; "' is not a valid directory"
End
End If
If empty Then
Print "'"; dirPath; "' is empty"
Else
Print "'"; dirPath; "' is not empty"
End If
Print
Print "Press any key to quit"
Sleep</syntaxhighlight>
 
{{out}}
<pre>
'c:\freebasic\docs' is empty
</pre>
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
 
include "NSLog.incl"
 
local fn DirectoryContents( url as CFURLRef ) as CFArrayRef
CFArrayRef contents = fn FileManagerContentsOfDirectoryAtURL( url, NULL, NSDirectoryEnumerationSkipsHiddenFiles )
if ( contents == NULL )
NSLog(@"Unable to get contents of directory \"%@\".",fn URLLastPathComponent(url))
end if
end fn = fn ArrayValueForKey( contents, @"lastPathComponent" )
 
void local fn DoIt
CFURLRef dirURL, fileURL
CFArrayRef contents
dirURL = fn URLFileURLWithPath( fn StringByExpandingTildeInPath( @"~/Desktop/docs" ) )
if ( fn FileManagerCreateDirectoryAtURL( dirURL, YES, NULL ) )
contents = fn DirectoryContents( dirURL )
if ( contents )
NSLog(@"Directory \"docs\" \b")
if ( len(contents) )
NSLog(@"contents:\n%@",contents)
else
NSLog(@"is empty.")
end if
NSLog(@"")
fileURL = fn URLFileURLWithPath( fn StringByExpandingTildeInPath( @"~/Desktop/docs/output.txt" ) )
if (fn FileManagerCreateFileAtURL( fileURL, NULL, NULL ) )
contents = fn DirectoryContents( dirURL )
NSLog(@"Directory \"docs\" \b")
if ( len(contents) )
NSLog(@"contents:\n%@",contents)
else
NSLog(@"is empty.")
end if
end if
end if
end if
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
{{out}}
<pre>
Directory "docs" is empty.
 
Directory "docs" contents:
(
"output.txt"
)
</pre>
 
=={{header|Gambas}}==
<syntaxhighlight lang="gambas">Public Sub Main()
Dim sFolder As String = User.home &/ "Rosetta"
Dim sDir As String[] = Dir(sFolder)
Dim sTemp As String
Dim sOutput As String = sfolder & " is NOT empty"
 
Try sTemp = sDir[0]
If Error Then sOutput = sfolder & " is empty"
 
Print sOutput
 
End</syntaxhighlight>
Output:
<pre>
/home/charlie/Rosetta is empty
</pre>
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 367 ⟶ 648:
return len(entries) == 0, nil
}
</syntaxhighlight>
</lang>
 
=={{header|Groovy}}==
Solution:
<langsyntaxhighlight lang="groovy">def isDirEmpty = { dirName ->
def dir = new File(dirName)
dir.exists() && dir.directory && (dir.list() as List).empty
}</langsyntaxhighlight>
 
Test:
<langsyntaxhighlight lang="groovy">def currentDir = new File('.')
def random = new Random()
def subDirName = "dir${random.nextInt(100000)}"
Line 384 ⟶ 666:
 
assert ! isDirEmpty('.')
assert isDirEmpty(subDirName)</langsyntaxhighlight>
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import System.Directory (getDirectoryContents)
import System.Environment (getArgs)
 
Line 395 ⟶ 677:
f False = "Directory is not empty"
 
main = getArgs >>= isEmpty . (!! 0) >>= putStrLn</langsyntaxhighlight>
Test:
<syntaxhighlight lang="text">$ mkdir 1
$ ./isempty 1
Directory is empty
$ ./isempty /usr/
Directory is not empty</langsyntaxhighlight>
 
 
==Icon and {{header|Unicon}}==
This example uses Unicon extensions. The 'empty' sub-directory was manually setup for this test.
<langsyntaxhighlight Iconlang="icon">procedure main()
every dir := "." | "./empty" do
write(dir, if isdirempty(dir) then " is empty" else " is not empty")
Line 420 ⟶ 702:
}
else stop(s," is not a directory or will not open")
end</langsyntaxhighlight>
 
{{out}}
Line 428 ⟶ 710:
=={{header|J}}==
 
<langsyntaxhighlight lang="j">require 'dir'
empty_dir=: 0 = '/*' #@dir@,~ ]</langsyntaxhighlight>
 
In other words, list the contents of the directory, count how many items are in it, and test if that count was zero.
Line 437 ⟶ 719:
Example, under windows, create some directories using cygwin:
 
<langsyntaxhighlight lang="bash">$ mkdir /tmp/a
$ touch /tmp/a/...
$ mkdir /tmp/b
$ mkdir /tmp/c
$ mkdir /tmp/c/d</langsyntaxhighlight>
 
Then, testing these directories, in J:
 
<langsyntaxhighlight lang="j"> empty_dir 'c:/cygwin/tmp/a'
0
empty_dir 'c:/cygwin/tmp/b'
1
empty_dir 'c:/cygwin/tmp/c'
0</langsyntaxhighlight>
 
=={{header|Java}}==
{{works with|Java|7+}}
This method does not check that the path given is actually a directory. If a path to a normal file is given, it will throw a <code>NullPointerException</code>. <code>File.listFiles()</code> does not count the "." and ".." entries.
<langsyntaxhighlight lang="java5">import java.nio.file.Paths;
//... other class code here
public static boolean isEmptyDir(String dirName){
return Paths.get(dirName).toFile().listFiles().length == 0;
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
The ECMAScript standard itself defines no IO interface – the following example makes use of the Node.js file IO library.
{{Works with|Node.js}}
<syntaxhighlight lang="javascript">// Node.js v14.15.4
const { readdirSync } = require("fs");
const emptydir = (path) => readdirSync(path).length == 0;
 
// tests, run like node emptydir.js [directories]
for (let i = 2; i < process.argv.length; i ++) {
let dir = process.argv[i];
console.log(`${dir}: ${emptydir(dir) ? "" : "not "}empty`)
}</syntaxhighlight>
 
=={{header|Julia}}==
<syntaxhighlight lang="julia"># v0.6.0
isemptydir(dir::AbstractString) = isempty(readdir(dir))
 
@show isemptydir(".")
@show isemptydir("/home")
</syntaxhighlight>
 
{{out}}
<pre>
isemptydir(".") = false
isemptydir("/home") = false
</pre>
 
=={{header|Kotlin}}==
<syntaxhighlight lang="scala">// version 1.1.4
 
import java.io.File
 
fun main(args: Array<String>) {
val dirPath = "docs" // or whatever
val isEmpty = (File(dirPath).list().isEmpty())
println("$dirPath is ${if (isEmpty) "empty" else "not empty"}")
}</syntaxhighlight>
 
=={{header|Lasso}}==
<langsyntaxhighlight Lassolang="lasso">dir('has_content') -> isEmpty
'<br />'
dir('no_content') -> isEmpty</langsyntaxhighlight>
{{out}}
<pre>false
Line 471 ⟶ 790:
 
=={{header|Liberty BASIC}}==
<syntaxhighlight lang="lb">
<lang lb>
dim info$(10, 10)
files "c:\", info$()
Line 487 ⟶ 806:
print "Folder ";folder$;" is empty."
end if
</syntaxhighlight>
</lang>
 
=={{header|Lingo}}==
<syntaxhighlight lang="lingo">on isDirEmpty (dir)
return getNthFileNameInFolder(dir, 1) = EMPTY
end</syntaxhighlight>
 
=={{header|Lua}}==
Pure Lua function based on snipplet from Stack Overflow[http://stackoverflow.com/questions/5303174/how-to-get-list-of-directories-in-lua#11130774].
<syntaxhighlight lang="lua">
function scandir(directory)
local i, t, popen = 0, {}, io.popen
local pfile = popen('ls -a "'..directory..'"')
for filename in pfile:lines() do
if filename ~= '.' and filename ~= '..' then
i = i + 1
t[i] = filename
end
end
pfile:close()
return t
end
 
function isemptydir(directory)
return #scandir(directory) == 0
end
</syntaxhighlight>
 
Using lfs[https://keplerproject.github.io/luafilesystem/] library.
<syntaxhighlight lang="lua">
function isemptydir(directory,nospecial)
for filename in require('lfs').dir(directory) do
if filename ~= '.' and filename ~= '..' then
return false
end
end
return true
end
</syntaxhighlight>
 
=={{header|Maple}}==
 
<syntaxhighlight lang="maple">
emptydirectory := proc (dir)
is(listdir(dir) = [".", ".."]);
end proc;
</syntaxhighlight>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">EmptyDirectoryQ[x_] := (SetDirectory[x]; If[FileNames[] == {}, True, False])
 
Example use:
EmptyDirectoryQ["C:\\Program Files\\Wolfram Research\\Mathematica\\9"]
->True</langsyntaxhighlight>
 
=={{header|MATLAB}} / {{header|Octave}}==
<syntaxhighlight lang="matlab">
<lang Matlab>
function x = isEmptyDirectory(p)
if isdir(p)
Line 506 ⟶ 871:
end;
end;
</syntaxhighlight>
</lang>
 
=={{header|min}}==
{{works with|min|0.19.3}}
<syntaxhighlight lang="min">(ls bool not) :empty-dir?</syntaxhighlight>
 
=={{header|MS-DOS}}==
 
Since you cannot remove a directory that isn't empty, one way to check is to attempt to remove it.
<syntaxhighlight lang="dos">C:\>rd GAMES
Unable to remove: GAMES.
 
C:\></syntaxhighlight>
=={{header|Nanoquery}}==
<syntaxhighlight lang="nanoquery">def isempty(dirname)
return len(new(Nanoquery.IO.File).listDir(dirname)) = 0
end</syntaxhighlight>
 
=={{header|Nemerle}}==
<langsyntaxhighlight Nemerlelang="nemerle">using System.IO;
using System.Console;
 
Line 528 ⟶ 908:
}
}
}</langsyntaxhighlight>
 
 
=={{header|NewLISP}}==
<syntaxhighlight lang="newlisp">
<lang NewLISP>
(define (empty-dir? path-to-check)
(empty? (clean (lambda (x) (or (= "." x) (= ".." x))) (directory path-to-check)))
)
</syntaxhighlight>
</lang>
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">import os, rdstdin
 
var empty = true
Line 545 ⟶ 924:
empty = false
break
echo empty</langsyntaxhighlight>
 
Alternatively:
 
<syntaxhighlight lang="nim">import os, sequtils
 
proc isEmptyDir(dir: string): bool =
toSeq(walkdir dir).len == 0
 
echo isEmptyDir("/tmp") # false - there is always something in "/tmp"
echo isEmptyDir("/temp") # true - "/temp" does not exist</syntaxhighlight>
 
=={{header|Objeck}}==
<syntaxhighlight lang="objeck">function : IsEmptyDirectory(dir : String) ~ Bool {
return Directory->List(dir)->Size() = 0;
}</syntaxhighlight>
 
=={{header|OCaml}}==
 
<langsyntaxhighlight lang="ocaml">let is_dir_empty d =
Sys.readdir d = [| |]</langsyntaxhighlight>
 
=={{header|ooRexx}}==
<syntaxhighlight lang="oorexx">Call test 'D:\nodir' /* no such directory */
Call test 'D:\edir' /* an empty directory */
Call test 'D:\somedir' /* directory with 2 files */
Call test 'D:\somedir','S' /* directory with 3 files */
Exit
test: Parse Arg fd,nest
If SysIsFileDirectory(fd)=0 Then
Say 'Directory' fd 'not found'
Else Do
ret=SysFileTree(fd'\*.*','X', 'F'nest)
If x.0=0 Then
say 'Directory' fd 'is empty'
Else Do
If nest='' Then
say 'Directory' fd 'contains' x.0 'files'
Else
say 'Directory' fd 'contains' x.0 'files (some nested)'
End
End
Return</syntaxhighlight>
{{out}}
<pre>Directory D:\nodir not found
Directory D:\edir is empty
Directory D:\somedir contains 2 files
Directory D:\somedir contains 3 files (some nested)</pre>
 
=={{header|PARI/GP}}==
 
Define a function ''chkdir(<path>)'' whichthat returns count of entries in a directory (without . and .. ):
<langsyntaxhighlight lang="parigp">chkdir(d)=extern(concat(["[ -d '",d,"' ]&&ls -A '",d,"'|wc -l||echo -1"]))</langsyntaxhighlight>
 
On error ''chkdir(...)'' returns -1, else count of entries. If ''chkdir() == 0,'' then directory is empty. So define an additional function:
<syntaxhighlight lang="parigp">dir_is_empty(d)=!chkdir(d)</syntaxhighlight>
 
Output:<pre>chkdir("/tmp"): 52
 
dir_is_empty("/tmp"): 0</pre>
 
=={{header|Pascal}}==
{{works with|GNU Pascal}}
Pascal does not know the notion of directories.
Therefore it is ''not possible'' to determine whether a directory is empty.
 
However, ''GNU Pascal'' provides certain extensions to [[Extended Pascal]] (ISO 10206) so it is possible nonetheless.
Note, the following solution works only on ''strictly hierarchical'' file systems.
<syntaxhighlight lang="pascal">program emptyDirectory(input, output);
 
type
path = string(1024);
 
{
\brief determines whether a (hierarchial FS) directory is empty
\param accessVia a possible route to access a directory
\return whether \param accessVia is an empty directory
}
function isEmptyDirectory(protected accessVia: path): Boolean;
var
{ NB: `file` data types without a domain type are non-standard }
directory: bindable file;
FD: bindingType;
begin
{ initialize variables }
unbind(directory);
FD := binding(directory);
FD.name := accessVia;
{ binding to directories is usually not possible }
FD.force := true;
{ the actual test }
bind(directory, FD);
FD := binding(directory);
unbind(directory);
isEmptyDirectory := FD.bound and FD.directory and (FD.links <= 2)
end;
 
{ === MAIN ============================================================= }
var
s: path;
begin
readLn(s);
writeLn(isEmptyDirectory(s))
end.</syntaxhighlight>
Note, symbolic links’ targets are resolved, so <tt>accessVia</tt> could in fact be a symbolic link ''to'' an empty directory.
 
=={{header|Perl}}==
===Simple version===
<langsyntaxhighlight lang="perl">sub dir_is_empty {!<$_[0]/*>}</langsyntaxhighlight>
This version however doesn't catch 'hidden' files that start with a dot.
 
Line 568 ⟶ 1,043:
Unfortunalety, BSD glob() doesn't handle inverted character class. If it did, this pattern could be used: <tt>{.[^.],}*</tt> (this works well in bash). But it doesn't, so there's a
===Thorough version===
<langsyntaxhighlight lang="perl">use IO::Dir;
sub dir_is_empty { !grep !/^\.{1,2}\z/, IO::Dir->new(@_)->read }</langsyntaxhighlight>
 
=={{header|Perl 6Phix}}==
<!--<syntaxhighlight lang="phix">(notonline)-->
<lang perl6>sub dir-is-empty ($d) { not dir $d }</lang>
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- file i/o</span>
The <tt>dir</tt> function returns a lazy list of filenames, excluding "<tt>.</tt>" and "<tt>..</tt>" automatically. Any boolean context (in this case the <tt>not</tt> function) will do just enough work on the lazy list to determine whether there are any elements, so we don't have to count the directory entries, or even read them all into memory, if there are more than one buffer's worth.
<span style="color: #008080;">procedure</span> <span style="color: #000000;">test</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">filename</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">msg</span>
<span style="color: #008080;">switch</span> <span style="color: #7060A8;">get_file_type</span><span style="color: #0000FF;">(</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #008080;">case</span> <span style="color: #000000;">FILETYPE_UNDEFINED</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">msg</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"is UNDEFINED"</span>
<span style="color: #008080;">case</span> <span style="color: #000000;">FILETYPE_NOT_FOUND</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">msg</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"is NOT_FOUND"</span>
<span style="color: #008080;">case</span> <span style="color: #004600;">FILETYPE_FILE</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">msg</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"is a FILE"</span>
<span style="color: #008080;">case</span> <span style="color: #004600;">FILETYPE_DIRECTORY</span><span style="color: #0000FF;">:</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">count</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">filter</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">vslice</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">dir</span><span style="color: #0000FF;">(</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">),</span><span style="color: #004600;">D_NAME</span><span style="color: #0000FF;">),</span><span style="color: #008000;">"out"</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"."</span><span style="color: #0000FF;">,</span><span style="color: #008000;">".."</span><span style="color: #0000FF;">}))</span>
<span style="color: #000000;">msg</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">count</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">?</span><span style="color: #008000;">"is an empty directory"</span>
<span style="color: #0000FF;">:</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"is a directory containing %d files"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">count</span><span style="color: #0000FF;">}))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">switch</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">,</span><span style="color: #000000;">msg</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">tests</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"C:\\xx"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"C:\\not_there"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"C:\\Program Files (x86)\\Phix\\p.exe"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"C:\\Windows"</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">test</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
C:\xx is an empty directory
C:\not_there is NOT_FOUND
C:\Program Files (x86)\Phix\p.exe is a FILE
C:\Windows is a directory containing 110 files
</pre>
 
=={{header|PHP}}==
Any improvements welcome but here is a starting point for PHP
<langsyntaxhighlight lang="php">
 
$dir = 'path_here';
Line 596 ⟶ 1,097:
}
 
</syntaxhighlight>
</lang>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(prinl "myDir is" (and (dir "myDir") " not") " empty")</langsyntaxhighlight>
{{out}}
<pre>myDir is not empty</pre>
 
 
=={{header|PowerShell}}==
 
{{works with|PowerShell|4.0}}
<syntaxhighlight lang="powershell">
<lang PowerShell>
$path = "C:\Users"
if((Dir $path).Count -eq 0) {
Line 614 ⟶ 1,114:
"$path is not empty"
}
</syntaxhighlight>
</lang>
<b>Output:</b>
<pre>
C:\Users is not empty
</pre>
 
=={{header|Prolog}}==
 
<syntaxhighlight lang="prolog">non_empty_file('.').
non_empty_file('..').
 
empty_dir(Dir) :-
directory_files(Dir, Files),
maplist(non_empty_file, Files).</syntaxhighlight>
 
=={{header|PureBasic}}==
<langsyntaxhighlight lang="purebasic">Procedure isDirEmpty(path$)
If Right(path$, 1) <> "\": path$ + "\": EndIf
Protected dirID = ExamineDirectory(#PB_Any, path$, "*.*")
Line 649 ⟶ 1,158:
EndIf
MessageRequester("Empty directory test", #DQUOTE$ + path$ + #DQUOTE$ + result$)
EndIf </langsyntaxhighlight>
{{out}} when selecting directories "L:\vv\6\" and "L:\vv\" :
<pre>"L:\vv\6\" is empty.
Line 657 ⟶ 1,166:
=={{header|Python}}==
{{works with|Python|2.x}}
<langsyntaxhighlight lang="python">import os;
if os.listdir(raw_input("directory")):
print "not empty"
else:
print "empty"
</syntaxhighlight>
</lang>
 
=={{header|R}}==
<syntaxhighlight lang="r">
is_dir_empty <- function(path){
if(length(list.files(path)) == 0)
print("This folder is empty")
}
is_dir_empty(path)
</syntaxhighlight>
 
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">
#lang racket
(empty? (directory-list "some-directory"))
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" line>sub dir-is-empty ($d) { not dir $d }</syntaxhighlight>
The <tt>dir</tt> function returns a lazy list of filenames, excluding "<tt>.</tt>" and "<tt>..</tt>" automatically. Any boolean context (in this case the <tt>not</tt> function) will do just enough work on the lazy list to determine whether there are any elements, so we don't have to count the directory entries, or even read them all into memory, if there are more than one buffer's worth.
 
=={{header|REXX}}==
{{works with|Regina}}
The following program was tested in a DOS window under Windows/XP and should work for all Microsoft Windows.
<langsyntaxhighlight lang="rexx">/*REXX pgm checks to see if a directory is empty; if not, lists entries.*/
parse arg xdir; if xdir='' then xdir='\someDir' /*Any DIR? Use default.*/
@.=0 /*default in case ADDRESS fails. */
Line 687 ⟶ 1,211:
if #==0 then #=' no ' /*use a word, ¬zero.*/
say center('directory ' xdir " has " # ' entries.',79,'─')
exit @.0+rc /*stick a fork in it, we're done.*/</langsyntaxhighlight>
{{out}} when the following input was used: &nbsp; <tt> temp </tt>
<pre>
Line 698 ⟶ 1,222:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
myList = dir("C:\Ring\bin")
if len(myList) > 0 see "C:\Ring\bin is not empty" + nl
else see "C:\Ring\bin is empty" + nl ok
</syntaxhighlight>
</lang>
 
=={{header|RPL}}==
≪ 1 OVER SIZE '''FOR''' j
DUP j GET EVAL
'''NEXT''' DROP
VARS SIZE NOT
≫ ''''MTDIR'''' STO
{{in}}
<pre>
{ HOME °RZTA °TEST } MTDIR
</pre>
{{out}}
<pre>
1: 0
</pre>
 
=={{header|Ruby}}==
Raises a SystemCallError if the named directory doesn’t exist.
<langsyntaxhighlight lang="ruby">Dir.entries("testdir").empty? </langsyntaxhighlight>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">files #f, DefaultDir$ + "\*.*" ' open some directory.
print "hasanswer: ";#f HASANSWER() ' if it has an answer it is not MT
print "rowcount: ";#f ROWCOUNT() ' if not MT, how many files?</langsyntaxhighlight>
 
=={{header|Rust}}==
<syntaxhighlight lang="rust">use std::fs::read_dir;
use std::error::Error;
 
fn main() {
for path in std::env::args().skip(1) { // iterate over the arguments, skipping the first (which is the executable)
match read_dir(path.as_str()) { // try to read the directory specified
Ok(contents) => {
let len = contents.collect::<Vec<_>>().len(); // calculate the amount of items in the directory
if len == 0 {
println!("{} is empty", path);
} else {
println!("{} is not empty", path);
}
},
Err(e) => { // If the attempt failed, print the corresponding error msg
println!("Failed to read directory \"{}\": {}", path, e.description());
}
}
}
}</syntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">import java.io.File
 
def isDirEmpty(file:File) : Boolean =
return file.exists && file.isDirectory && file.list.isEmpty</langsyntaxhighlight>
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "osfiles.s7i";
 
Line 730 ⟶ 1,291:
begin
writeln(dirEmpty("somedir"));
end func;</langsyntaxhighlight>
 
=={{header|SenseTalk}}==
The filesAndFolders function returns an empty list if a directory is empty (and does not return '.' or '..').
<syntaxhighlight lang="sensetalk">put the temporary folder & "NewFolder" into newFolderPath
make folder newFolderPath -- create a new empty directory
 
if the filesAndFolders in newFolderPath is empty then
put "Directory " & newFolderPath & " is empty!"
else
put "Something is present in " & newFolderPath
end if
</syntaxhighlight>
{{out}}
<pre>
Directory /var/folders/dp/0nmm3z4m8xl5m3008k8db78h0000gn/T/NewFolder is empty!
</pre>
 
=={{header|Sidef}}==
Built-in method:
<langsyntaxhighlight lang="ruby">Dir.new('/my/dir').is_empty; # true, false or nil</langsyntaxhighlight>
 
User-defined function:
<langsyntaxhighlight lang="ruby">func is_empty(dir) {
dir.open(\var dir_h) || return nil;
dir_h.each { |file|
Line 744 ⟶ 1,321:
};
return true;
};</langsyntaxhighlight>
 
=={{header|Standard ML}}==
<langsyntaxhighlight lang="sml">fun isDirEmpty(path: string) =
let
val dir = OS.FileSys.openDir path
Line 758 ⟶ 1,335:
| _ => false
)
end;</langsyntaxhighlight>
 
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">proc isEmptyDir {dir} {
# Get list of _all_ files in directory
set filenames [glob -nocomplain -tails -directory $dir * .*]
# Check whether list is empty (after filtering specials)
expr {![llength [lsearch -all -not -regexp $filenames {^\.\.?$}]]}
}</langsyntaxhighlight>
 
=={{header|UNIX Shell}}==
<langsyntaxhighlight lang="bash">
#!/bin/sh
DIR=/tmp/foo
[ `ls -a $DIR|wc -l` -gt 2 ] && echo $DIR is NOT empty || echo $DIR is empty
</syntaxhighlight>
</lang>
 
=={{header|VBA}}==
<syntaxhighlight lang="vb">Sub Main()
Debug.Print IsEmptyDirectory("C:\Temp")
Debug.Print IsEmptyDirectory("C:\Temp\")
End Sub
 
Private Function IsEmptyDirectory(D As String) As Boolean
Dim Sep As String
Sep = Application.PathSeparator
D = IIf(Right(D, 1) <> Sep, D & Sep, D)
IsEmptyDirectory = (Dir(D & "*.*") = "")
End Function</syntaxhighlight>
 
=={{header|VBScript}}==
<syntaxhighlight lang="vb">
<lang vb>
Function IsDirEmpty(path)
IsDirEmpty = False
Line 790 ⟶ 1,379:
WScript.StdOut.WriteLine IsDirEmpty("C:\Temp")
WScript.StdOut.WriteLine IsDirEmpty("C:\Temp\test")
</syntaxhighlight>
</lang>
 
{{Out}}
Line 796 ⟶ 1,385:
False
True
</pre>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">import os
 
fn main() {
println(is_empty_dir('../Check'))
}
 
fn is_empty_dir(name string) string {
if os.is_dir(name) == false {return 'Directory name not exist!'}
if os.is_dir(name) && os.is_dir_empty(name) == true {return 'Directory exists and is empty!'}
return 'Directory not empty!'
}
</syntaxhighlight>
 
=={{header|Wren}}==
<syntaxhighlight lang="wren">import "io" for Directory
 
var isEmptyDir = Fn.new { |path|
if (!Directory.exists(path)) Fiber.abort("Directory at '%(path)' does not exist.")
return Directory.list(path).count == 0
}
 
var path = "test"
var empty = isEmptyDir.call(path)
System.print("'%(path)' is %(empty ? "empty" : "not empty")")</syntaxhighlight>
 
{{out}}
'test' is an empty directory I made earlier.
<pre>
'test' is empty
</pre>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">path:="Empty"; File.isDir(path).println();
File.mkdir(path); File.isDir(path).println();
File.glob(path+"/*").println(); // show contents of directory</langsyntaxhighlight>
{{out}}
<pre>
Line 810 ⟶ 1,431:
 
{{omit from|ACL2}}
{{omit from|TI-83 BASIC|Does not have a filesystem.}}
9,476

edits