Make directory path: Difference between revisions

m
→‎{{header|Wren}}: Changed to Wren S/H (future CLI version)
m (→‎{{header|REXX}}: added/changed comments and whitespace.)
m (→‎{{header|Wren}}: Changed to Wren S/H (future CLI version))
 
(46 intermediate revisions by 32 users not shown)
Line 1:
{{task|File System Operations}}
 
;Task:
Create a directory and any missing parents.
 
Line 9 ⟶ 11:
 
It's likely that your language implements such a function as part of its standard library. If so, please also show how such a function would be implemented.
<br><br>
 
=={{header|11l}}==
<syntaxhighlight lang="11l">fs:create_dirs(path)</syntaxhighlight>
 
=={{header|Ada}}==
<syntaxhighlight lang="ada">with Ada.Command_Line;
with Ada.Directories;
with Ada.Text_IO;
 
procedure Make_Directory_Path is
begin
if Ada.Command_Line.Argument_Count /= 1 then
Ada.Text_IO.Put_Line ("Usage: make_directory_path <path/to/dir>");
return;
end if;
 
declare
Path : String renames Ada.Command_Line.Argument (1);
begin
Ada.Directories.Create_Path (Path);
end;
end Make_Directory_Path;</syntaxhighlight>
 
=={{header|Aime}}==
<syntaxhighlight lang="aime">void
mkdirp(text path)
{
list l;
text p, s;
 
file().b_affix(path).news(l, 0, 0, "/");
 
for (, s in l) {
p = p + s + "/";
trap_q(mkdir, p, 00755);
}
}
 
integer
main(void)
{
mkdirp("./path/to/dir");
 
0;
}</syntaxhighlight>
 
=={{header|AppleScript}}==
AppleScript is not a cross-platform language so this is a macOS-only solution.
In post-Yosemite AppleScript we can draw on the macOS Foundation classes,
which include the NSFileManager method:
`createDirectoryAtPath:withIntermediateDirectories:attributes:error:`
 
<syntaxhighlight lang="applescript">use framework "Foundation"
use scripting additions
 
 
-- createOrFindDirectoryMay :: Bool -> FilePath -> Maybe IO ()
on createOrFindDirectoryMay(fp)
createDirectoryIfMissingMay(true, fp)
end createOrFindDirectoryMay
 
 
-- createDirectoryIfMissingMay :: Bool -> FilePath -> Maybe IO ()
on createDirectoryIfMissingMay(blnParents, fp)
if doesPathExist(fp) then
nothing("Directory already exists: " & fp)
else
set e to reference
set ca to current application
set oPath to (ca's NSString's stringWithString:(fp))'s ¬
stringByStandardizingPath
set {bool, nse} to ca's NSFileManager's ¬
defaultManager's createDirectoryAtPath:(oPath) ¬
withIntermediateDirectories:(blnParents) ¬
attributes:(missing value) |error|:(e)
if bool then
just(fp)
else
nothing((localizedDescription of nse) as string)
end if
end if
end createDirectoryIfMissingMay
 
-- TEST ----------------------------------------------------------------------
on run
createOrFindDirectoryMay("~/Desktop/Notes/today")
end run
 
-- GENERIC FUNCTIONS ---------------------------------------------------------
 
-- doesPathExist :: FilePath -> IO Bool
on doesPathExist(strPath)
set ca to current application
ca's NSFileManager's defaultManager's ¬
fileExistsAtPath:((ca's NSString's ¬
stringWithString:strPath)'s ¬
stringByStandardizingPath)
end doesPathExist
 
-- just :: a -> Just a
on just(x)
{nothing:false, just:x}
end just
 
-- nothing :: () -> Nothing
on nothing(msg)
{nothing:true, msg:msg}
end nothing</syntaxhighlight>
 
=={{header|Arturo}}==
 
<syntaxhighlight lang="rebol">write.directory "path/to/some/directory" ø</syntaxhighlight>
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f MAKE_DIRECTORY_PATH.AWK path ...
BEGIN {
Line 26 ⟶ 143:
return system(cmd)
}
</syntaxhighlight>
</lang>
<p>sample command and output under Windows 8:</p>
<pre>
Line 35 ⟶ 152:
'\TEMP\A\B C' created
</pre>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
Line 67 ⟶ 185:
}
return 0;
}</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
=={{header|C sharp|C#}}==
<lang lisp>
<syntaxhighlight lang="csharp">System.IO.Directory.CreateDirectory(path)</syntaxhighlight>
(ensure-directories-exist "your/path/name")
 
</lang>
=={{header|C++|CPP}}==
<syntaxhighlight lang="cpp">
#include <filesystem>
#include <iostream>
 
namespace fs = std::filesystem;
 
int main(int argc, char* argv[])
{
if(argc != 2)
{
std::cout << "usage: mkdir <path>\n";
return -1;
}
 
fs::path pathToCreate(argv[1]);
 
if (fs::exists(pathToCreate))
return 0;
 
if (fs::create_directories(pathToCreate))
return 0;
else
{
std::cout << "couldn't create directory: " << pathToCreate.string() << std::endl;
return -1;
}
}
</syntaxhighlight>
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="clojure">(defn mkdirp [path]
(let [dir (java.io.File. path)]
(if (.exists dir)
true
(.mkdirs dir))))</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
<syntaxhighlight lang="lisp">
(ensure-directories-exist "your/path/name")
</syntaxhighlight>
 
=={{header|D}}==
<syntaxhighlight lang="d">import std.stdio;
 
void main() {
makeDir("parent/test");
}
 
/// Manual implementation of what mkdirRecurse in std.file does.
void makeDir(string path) out {
import std.exception : enforce;
import std.file : exists;
enforce(path.exists, "Failed to create the requested directory.");
} body {
import std.array : array;
import std.file;
import std.path : pathSplitter, chainPath;
 
auto workdir = "";
foreach (dir; path.pathSplitter) {
workdir = chainPath(workdir, dir).array;
if (workdir.exists) {
if (!workdir.isDir) {
import std.conv : text;
throw new FileException(text("The file ", workdir, " in the path ", path, " is not a directory."));
}
} else {
workdir.mkdir();
}
}
}</syntaxhighlight>
=={{header|Delphi}}==
{{libheader| System.SysUtils}}
{{libheader| System.IOUtils}}
<syntaxhighlight lang="delphi">
program Make_directory_path;
 
{$APPTYPE CONSOLE}
 
uses
System.SysUtils,
System.IOUtils;
 
const
Path1 = '.\folder1\folder2\folder3'; // windows relative path (others OS formats are acepted)
Path2 = 'folder4\folder5\folder6';
 
begin
// "ForceDirectories" work with relative path if start with "./"
if ForceDirectories(Path1) then
Writeln('Created "', path1, '" sucessfull.');
 
// "TDirectory.CreateDirectory" work with any path format
// but don't return sucess, requere "TDirectory.Exists" to check
TDirectory.CreateDirectory(Path2);
if TDirectory.Exists(Path2) then
Writeln('Created "', path2, '" sucessfull.');
Readln;
end.</syntaxhighlight>
 
=={{header|Elixir}}==
Tries to create the directory `path`. Missing parent directories are created.
<langsyntaxhighlight lang="elixir">File.mkdir_p("./path/to/dir")</langsyntaxhighlight>
 
=={{header|ERRE}}==
ERRE has the procedure "OS_MKDIR" in PC.LIB standard library, that creates a directory with
all missing parents. Existing directory are simply ignored.
<langsyntaxhighlight ERRElang="erre">OS_MKDIR("C:\EXAMPLES\03192015")</langsyntaxhighlight>
 
=={{header|F_Sharp|F#}}==
<p>The library function System.IO.Directory.CreateDirectory also returns a DirectoryInfo
object of the deepest directory in the path.</p>
<p>In the F# REPL:</p>
{{out}}
<pre>
> System.IO.Directory.CreateDirectory (System.IO.Directory.GetCurrentDirectory())
;;
val it : System.IO.DirectoryInfo =
Temp {Attributes = Directory;
CreationTime = 2016-06-01 04:12:25;
CreationTimeUtc = 2016-06-01 02:12:25;
Exists = true;
Extension = "";
FullName = "C:\Users\Kai\AppData\Local\Temp";
LastAccessTime = 2016-08-18 20:42:21;
LastAccessTimeUtc = 2016-08-18 18:42:21;
LastWriteTime = 2016-08-18 20:42:21;
LastWriteTimeUtc = 2016-08-18 18:42:21;
Name = "Temp";
Parent = Local;
Root = C:\;}
> </pre>
 
=={{header|Factor}}==
The <code>make-directories</code> word performs this task. Note the value of <code>current-directory</code> is used as the base directory if a relative pathname is given.
<syntaxhighlight lang="factor">USE: io.directories
"path/to/dir" make-directories</syntaxhighlight>
The implementation of <code>make-directories</code>:
<syntaxhighlight lang="factor">USING: combinators.short-circuit io.backend io.files
io.pathnames kernel sequences ;
IN: io.directories
: make-directories ( path -- )
normalize-path trim-tail-separators dup
{ [ "." = ] [ root-directory? ] [ empty? ] [ exists? ] } 1||
[ make-parent-directories dup make-directory ] unless drop ;</syntaxhighlight>
 
 
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">#ifdef __FB_WIN32__
Dim pathname As String = "Ring\docs"
#else
Dim pathname As String = "Ring/docs"
#endif
 
Dim As String mkpathname = "mkdir " & pathname
Dim result As Long = Shell (mkpathname)
 
If result = 0 Then
Print "Created the directory..."
Chdir(pathname)
Print Curdir
Else
Print "error: unable to create folder " & pathname & " in the current path."
End If
Sleep</syntaxhighlight>
 
=={{header|FutureBasic}}==
==={{header|FileManager}}===
<syntaxhighlight lang="futurebasic">
void local fn MakeDirectoryPath
CFStringRef path = fn StringByExpandingTildeInPath( @"~/Desktop/FirstDir/SecondDir" )
fn FileManagerCreateDirectoryAtURL( fn URLFileURLWithPath(path), YES, NULL )
end fn
 
fn MakeDirectoryPath
 
HandleEvents
</syntaxhighlight>
 
==={{header|UNIX}}===
<syntaxhighlight lang="futurebasic">
void local fn MakeDirectoryPath
Str255 cmd
cmd = "mkdir -p " + fn StringPascalString( fn StringByExpandingTildeInPath( @"~/Desktop/FirstDir/SecondDir" ) )
open "UNIX", 2, cmd
end fn
 
fn MakeDirectoryPath
 
HandleEvents
</syntaxhighlight>
 
==={{header|UNIX via Task}}===
<syntaxhighlight lang="futurebasic">
void local fn MakeDirectoryPath
TaskRef task = fn TaskInit
TaskSetExecutableURL( task, fn URLFileURLWithPath( @"bin/mkdir" ) )
TaskSetArguments( task, @[@"-p",fn StringByExpandingTildeInPath( @"~/Desktop/FirstDir/SecondDir" )] )
fn TaskLaunch( task, NULL )
end fn
 
fn MakeDirectoryPath
 
HandleEvents
</syntaxhighlight>
 
 
=={{header|Gambas}}==
<syntaxhighlight lang="gambas">Public Sub Form_Open()
 
If Not Exist(User.home &/ "TestFolder") Then Mkdir User.Home &/ "TestFolder"
 
End</syntaxhighlight>
 
=={{header|Go}}==
The standard packages include <tt>[http://golang.org/pkg/os/#MkdirAll os.MkdirAll]</tt> which does exactly this
(and its source is also available via that link).
<langsyntaxhighlight lang="go"> os.MkdirAll("/tmp/some/path/to/dir", 0770)</langsyntaxhighlight>
 
=={{header|Haskell}}==
<syntaxhighlight lang="haskell">
<lang Haskell>
import System.Directory (createDirectory, setCurrentDirectory)
import Data.List.Split (splitOn)
Line 103 ⟶ 420:
let path = splitOn "/" "path/to/dir"
mapM_ (\x -> createDirectory x >> setCurrentDirectory x) path
</syntaxhighlight>
</lang>
 
=={{header|J}}==
Line 109 ⟶ 426:
The verb <code>pathcreate</code> in the addon package [http://www.jsoftware.com/jwiki/Addons/general/dirutils general/dirutils] will create any non-existing directories in a path. It works on Windows, Linux and OS X.
<langsyntaxhighlight Jlang="j">require 'general/dirutils'
pathcreate '/tmp/some/path/to/dir'</langsyntaxhighlight>
 
Code is similar to the following:
<langsyntaxhighlight Jlang="j">pathcreate=: monad define
todir=. termsep_j_ jpathsep y
todirs=. }. ,each /\ <;.2 todir NB. base dirs
Line 129 ⟶ 446:
)
 
direxist=: 2 = ftype&>@:boxopen</langsyntaxhighlight>
 
=={{header|Java}}==
The Java method for this is ''mkdirs'' and can be found in java.io.File. The source is in the ''src.zip'' of the JDK root directory.
<langsyntaxhighlight lang="java">import java.io.File;
 
public interface Test {
Line 146 ⟶ 463:
}
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
Line 153 ⟶ 470:
Simplified version of the popular [https://www.npmjs.org/package/mkdirp mkdirp library]:
 
<langsyntaxhighlight Javascriptlang="javascript">var path = require('path');
var fs = require('fs');
 
Line 179 ⟶ 496:
}
});
}</langsyntaxhighlight>
 
=={{header|MathematicaJulia}}==
{{works with|Julia|0.6}}
 
<syntaxhighlight lang="julia">mkpath("/tmp/unusefuldir/helloworld.d/test123")</syntaxhighlight>
 
=={{header|Kotlin}}==
<syntaxhighlight lang="scala">// version 1.0.6
 
import java.io.File
 
fun main(args: Array<String>) {
// using built-in mkdirs() method
val success = File("./path/to/dir").mkdirs()
if (success) println("Directory path was created successfully")
else println("Failed to create directory path")
}</syntaxhighlight>
 
{{out}}
<pre>
Directory path was created successfully
</pre>
 
=={{header|Lua}}==
The ubiquitous luafilesystem module contains lfs.mkdir but this does not have an option equivalent to the posix mkdir -p.
Instead, the function shown here uses package.config to determine the correct directory separator for the OS and then iterates over the path string to create each individual folder in turn.
<syntaxhighlight lang="lua">require("lfs")
 
function mkdir (path)
local sep, pStr = package.config:sub(1, 1), ""
for dir in path:gmatch("[^" .. sep .. "]+") do
pStr = pStr .. dir .. sep
lfs.mkdir(pStr)
end
end
 
mkdir("C:\\path\\to\\dir") -- Quoting backslashes requires escape sequence</syntaxhighlight>
Note that attempting to run lfs.mkdir for a path that already exists writes no changes to disk and returns nil.
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
Creates directory specified by path, creating intermediate directories as necessary, and never fails if path already exists.
<langsyntaxhighlight Mathematicalang="mathematica">mkdirp[path_] := Quiet[CreateDirectory[path,{CreateIntermediateDirectories->True}],{CreateDirectory::filex}]</langsyntaxhighlight>
 
=={{header|PerlNewLISP}}==
<syntaxhighlight lang="newlisp">(define (mkdir-p mypath)
(if (= "/" (mypath 0)) ;; Abs or relative path?
(setf /? "/")
(setf /? "")
)
(setf path-components (clean empty? (parse mypath "/"))) ;; Split path and remove empty elements
(for (x 0 (length path-components))
(setf walking-path (string /? (join (slice path-components 0 (+ 1 x)) "/")))
(make-dir walking-path)
)
)
 
;; Using user-made function...
Using the File::Path core module:
(mkdir-p "/tmp/rosetta/test1")
 
;; ... or calling OS command directly.
<lang perl>use File::Path qw(make_path);
(! "mkdir -p /tmp/rosetta/test2")
(exit)</syntaxhighlight>
 
=={{header|Nim}}==
make_path('path/to/dir')</lang>
Note that the procedure "createDir" used here doesn’t raise an exception if the directory already exists because for current situations this is not an error. An exception is raised if the directory doesn’t exist after the call, if, for instance, permission is not allowed to create the directory.
<syntaxhighlight lang="nim">import os
 
try:
=={{header|Perl 6}}==
createDir("./path/to/dir")
echo "Directory now exists."
except OSError:
echo "Failed to create the directory."</syntaxhighlight>
 
=={{header|Objeck}}==
There is a built-in function for this:
<syntaxhighlight lang="objeck">class Program {
function : Main(args : String[]) ~ Nil {
System.IO.File.Directory->CreatePath("your/path/name")->PrintLine();
}
}</syntaxhighlight>
 
<lang perl6>mkpath 'path/to/dir'</lang>
 
=={{header|OCaml}}==
(<code>mkdir</code> also exists as a built-in function, but does not create nested subdirectories).
 
<syntaxhighlight lang="ocaml">let rec mkdir_p path perm =
if path <> "" then
try Unix.mkdir path perm with
| Unix.Unix_error (EEXIST, _, _) when Sys.is_directory path -> ()
| Unix.Unix_error (ENOENT, _, _) ->
mkdir_p (Filename.dirname path) perm;
Unix.mkdir path perm</syntaxhighlight>Requires the standard <code>[https://ocaml.org/manual/libunix.html unix]</code> library
 
=={{header|Perl}}==
 
Using the File::Path core module:
 
<syntaxhighlight lang="perl">use File::Path qw(make_path);
 
make_path('path/to/dir')</syntaxhighlight>
 
=={{header|Phix}}==
There's a builtin for that
<!--<syntaxhighlight lang="phix">(notonline)-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (file i/o)</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">create_directory</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"myapp/interface/letters"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"Filesystem problem - could not create the new folder"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<!--</syntaxhighlight>-->
The implementation in builtins/pfile.e is as follows (see there for initf() etc):
<!--<syntaxhighlight lang="phix">-->
<span style="color: #008080;">global</span> <span style="color: #008080;">function</span> <span style="color: #000000;">create_directory</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">name</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">mode</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0o700</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">bool</span> <span style="color: #000000;">make_parent</span><span style="color: #0000FF;">=</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">finit</span> <span style="color: #008080;">then</span> <span style="color: #000000;">initf</span><span style="color: #0000FF;">()</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">name</span><span style="color: #0000FF;">)!=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">name</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">get_proper_path</span><span style="color: #0000FF;">(</span><span style="color: #000000;">name</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- Remove any trailing slash.</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">name</span><span style="color: #0000FF;">[$]=</span><span style="color: #004600;">SLASH</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">name</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">name</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..$-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">make_parent</span> <span style="color: #008080;">then</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">pos</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rfind</span><span style="color: #0000FF;">(</span><span style="color: #004600;">SLASH</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">name</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">pos</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">parent</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">name</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">pos</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">file_exists</span><span style="color: #0000FF;">(</span><span style="color: #000000;">parent</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #000000;">file_type</span><span style="color: #0000FF;">(</span><span style="color: #000000;">parent</span><span style="color: #0000FF;">)==</span><span style="color: #004600;">FILETYPE_DIRECTORY</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">else</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">create_directory</span><span style="color: #0000FF;">(</span><span style="color: #000000;">parent</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">mode</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">make_parent</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">0</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #004080;">bool</span> <span style="color: #000000;">ret</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">LINUX</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">ret</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">not</span> <span style="color: #7060A8;">c_func</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xCreateDirectory</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">name</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">mode</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">elsif</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">WINDOWS</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">ret</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">c_func</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xCreateDirectory</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">name</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">ret</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<!--</syntaxhighlight>-->
Of course you could also use system("mkdir -p path/to/dir") or whatever.
 
=={{header|PicoLisp}}==
<syntaxhighlight lang="picolisp">(call "mkdir" "-p" "path/to/dir")</syntaxhighlight>
 
=={{header|PowerShell}}==
<syntaxhighlight lang="powershell">
<lang PowerShell>
New-Item -Path ".\path\to\dir" -ItemType Directory -ErrorAction SilentlyContinue
</syntaxhighlight>
</lang>
 
=={{header|Python}}==
<syntaxhighlight lang="python">
<lang Python>
from errno import EEXIST
from os import mkdir, curdir
Line 231 ⟶ 681:
if e.errno != EEXIST:
raise
</syntaxhighlight>
</lang>
 
Above is a modified version of the standard library's <code>os.makedirs</code>, for pedagogical purposes. In practice, you would be more likely to use the standard library call:
 
<syntaxhighlight lang="python">
<lang Python>
def mkdirp(path):
try:
Line 243 ⟶ 693:
pass
else: raise
</syntaxhighlight>
</lang>
 
In Python3 this becomes even simpler:
 
<syntaxhighlight lang="python">
<lang Python>
def mkdirp(path):
os.makedirs(path, exist_ok=True)
</syntaxhighlight>
</lang>
 
=={{header|Racket}}==
Line 262 ⟶ 712:
</blockquote>
 
<langsyntaxhighlight lang="racket">#lang racket
(define path-str "/tmp/woo/yay")
(define path/..-str "/tmp/woo")
Line 283 ⟶ 733:
(make-directory* path-str)
 
(report-path-exists)</langsyntaxhighlight>
 
{{out}}
Line 293 ⟶ 743:
 
</pre>
 
=={{header|Raku}}==
(formerly Perl 6)
{{Works with|rakudo|2016.06}}
 
There is a built-in function for this:
 
<syntaxhighlight lang="raku" line>mkdir 'path/to/dir'</syntaxhighlight>
 
Alternatively, a custom solution (as per task description) that only uses the built-in <tt>mkdir</tt> non-recursively. The "triangle reduce" meta-operator <code>[\ ]</code> is used get the intermediate results of a left fold with the comma operator on the list of path elements.
 
<syntaxhighlight lang="raku" line>for [\,] $*SPEC.splitdir("../path/to/dir") -> @path {
mkdir $_ unless .e given $*SPEC.catdir(@path).IO;
}</syntaxhighlight>
 
=={{header|REXX}}==
Line 300 ⟶ 764:
 
Usage note: &nbsp; without the error messages being suppressed, the &nbsp; '''MKDIR''' &nbsp; command will issue an error message if the subdirectory (or its path) already exists.
<langsyntaxhighlight lang="rexx">/*REXX program creates a directory (folder) and all its parent paths as necessary. */
trace off /*suppress possible warning msgs.*/
 
Line 306 ⟶ 770:
 
'MKDIR' dPath "2>nul" /*alias could be used: MD dPath */
/*stick a fork in it, we're done.*/</langsyntaxhighlight>
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
System("mkdir C:\Ring\docs")
isdir("C:\Ring\docs")
Line 321 ⟶ 785:
return false
done
</syntaxhighlight>
</lang>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">require 'fileutils'
FileUtils.mkdir_p("path/to/dir") </langsyntaxhighlight>
mkdir_p also takes an array of pathnames instead of a single pathname as an argument.
mkdir_p is aliased as: mkpath, makedirs.
 
=={{header|Run BASIC}}==
<syntaxhighlight lang="runbasic">
files #f, "c:\myDocs" ' check for directory
if #f hasanswer() then
if #f isDir() then ' is it a file or a directory
print "A directory exist"
else
print "A file exist"
end if
else
shell$("mkdir c:\myDocs" ' if not exist make a directory
end if</syntaxhighlight>
The following info about files / directory
FILE ACCESSOR methods
#handle HASANSWER() - Return non-zero if the file accessor has at least one
resulting row.
#handle ROWCOUNT() - Return the number of rows returned.
#handle NEXTFILE$() - Advance to the next row and return a comma delimited string for the next file (name, size, date, time, directory flag).
#handle NEXTFILE$([delimExpr$]) - Like NEXTFILE$() but you get to specify the delimiter instead of a comma.
#handle NAME$() - Return the name of the current file row.
#handle SIZE() - Return the size of the current file row.
#handle DATE$() - Return a string containing a formatted date for the current file row.
#handle TIME$() - Return a string containing a formatted time for the current file row.
#handle ISDIR() - Return non-zero if the current file row represents a directory instead of a file.
#handle RESET() - Reset the file accessor back to the beginning so you can read through them again.
#handle DATEFORMAT(template$) - Set the date format using a "mmm dd, yyyy" style template$.
#handle TIMEFORMAT(template$) - Set the time format using a "hh:mm:ss" style template$.
#handle ISNULL() - Returns zero (or false)
#handle DEBUG$() - Returns the string "Files"
 
=={{header|Rust}}==
<syntaxhighlight lang="rust">use std::fs;
 
fn main() {
fs::create_dir_all("./path/to/dir").expect("An Error Occured!")
}</syntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight Scalalang="scala">new java.io.File("/path/to/dir").mkdirs</langsyntaxhighlight>
Alternative (platform-independent) for the library function:
<langsyntaxhighlight Scalalang="scala">import java.io.File
 
def mkdirs(path: List[String]) = // return true if path was created
Line 338 ⟶ 839:
 
mkdirs(List("/path", "to", "dir"))
</syntaxhighlight>
</lang>
 
=={{header|Seed7}}==
Line 344 ⟶ 845:
defines the function doMkdirCmd, which is used below.
 
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "cli_cmds.s7i";
 
Line 350 ⟶ 851:
begin
doMkdirCmd(argv(PROGRAM), TRUE);
end func;</langsyntaxhighlight>
 
The library cli_cmds.s7i defines also
Line 359 ⟶ 860:
The function doMkdir is used in the alternate solution below:
 
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "cli_cmds.s7i";
 
Line 368 ⟶ 869:
parameters := join(argv(PROGRAM), " ");
doMkdir(parameters);
end func;</langsyntaxhighlight>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">Dir.new(Dir.cwd, "path", "to", "dir").make_path; # works cross-platform</langsyntaxhighlight>
 
=={{header|Tcl}}==
Tcl's built in <code>file mkdir</code> works exactly this way:
<langsyntaxhighlight lang="tcl">file mkdir ./path/to/dir</langsyntaxhighlight>
If a directory cannot be made (e.g., because it would involve making a directory with the same name as an existing file) the command will throw a trappable error, as normal for Tcl commands.
 
Line 381 ⟶ 882:
{{works with|Bourne Again SHell}}
 
<langsyntaxhighlight lang="bash">function mkdirp() { mkdir -p "$1"; }</langsyntaxhighlight>
 
=={{header|Visual Basic .NET}}==
{{trans|C#}}
<syntaxhighlight lang="vbnet">Module Module1
 
Sub Main()
System.IO.Directory.CreateDirectory("some/where")
End Sub
 
End Module</syntaxhighlight>
 
=={{header|Wren}}==
{{libheader|DOME}}
Curiously, this can only be done at present from a DOME program. A minimal script to do it would be:
<syntaxhighlight lang="wren">import "io" for FileSystem
 
class Main {
construct new() {}
 
init() {
FileSystem.createDirectory("path/to/dir")
}
 
update() {}
 
draw(alpha) {}
}
 
var Game = Main.new()</syntaxhighlight>
<br>
However, this functionality is expected to be added to Wren-cli in the next version. The code needed will be as follows:
<syntaxhighlight lang="wren">import "io" for Directory
 
Directory.create("path/to/dir")</syntaxhighlight>
 
=={{header|zkl}}==
This is for Unix as zkl doesn't have a built in mkdir method.
<langsyntaxhighlight lang="zkl">System.cmd("mkdir -p ../foo/bar")</langsyntaxhighlight>
The system error code is returned (0 in this case).
<langsyntaxhighlight lang="zkl">fcn mkdir(path) { System.cmd("mkdir -p "+path) }</langsyntaxhighlight>
{{out}}
<pre>
9,476

edits