_mkdir, _wmkdir
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

_mkdir, _wmkdir

Create a new directory.

int _mkdir(
   const char *dirname 
int _wmkdir(
   const wchar_t *dirname 


Path for new directory.

Return Value

Each of these functions returns the value 0 if the new directory was created. On an error the function returns –1 and sets errno as follows:

Directory was not created because dirname is the name of an existing file, directory, or device.
Path was not found.

See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these, and other, return codes.


The _mkdir function creates a new directory with the specified dirname. _mkdir can create only one new directory per call, so only the last component of dirname can name a new directory. _mkdir does not translate path delimiters. In Windows NT, both the backslash ( \) and the forward slash (/ ) are valid path delimiters in character strings in run-time routines.

_wmkdir is a wide-character version of _mkdir; the dirname argument to _wmkdir is a wide-character string. _wmkdir and _mkdir behave identically otherwise.

Generic-Text Routine Mappings

TCHAR.H routine _UNICODE & _MBCS not defined _MBCS defined _UNICODE defined
_tmkdir _mkdir _mkdir _wmkdir


Routine Required header Compatibility
_mkdir <direct.h> Win 98, Win Me, Win NT, Win 2000, Win XP
_wmkdir <direct.h> or <wchar.h> Win NT, Win 2000, Win XP

For additional compatibility information, see Compatibility in the Introduction.


All versions of the C run-time libraries.


// crt_makedir.c

#include <direct.h>
#include <stdlib.h>
#include <stdio.h>

int main( void )
   if( _mkdir( "\\testtmp" ) == 0 )
      printf( "Directory '\\testtmp' was successfully created\n" );
      system( "dir \\testtmp" );
      if( _rmdir( "\\testtmp" ) == 0 )
        printf( "Directory '\\testtmp' was successfully removed\n"  );
         printf( "Problem removing directory '\\testtmp'\n" );
      printf( "Problem creating directory '\\testtmp'\n" );

Sample Output

Directory '\testtmp' was successfully created
 Volume in drive C has no label.
 Volume Serial Number is E078-087A

 Directory of C:\testtmp

02/12/2002  09:56a      <DIR>          .
02/12/2002  09:56a      <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  15,498,690,560 bytes free
Directory '\testtmp' was successfully removed

See Also

Directory Control Routines | _chdir | _rmdir | Run-Time Routines and .NET Framework Equivalents

© 2015 Microsoft