10.10. Creating a Directory
Problem
You have to create a directory, and you want to do it portably, i.e., without using OS-specific APIs.
Solution
On most platforms, you will be able to use the mkdir system call that is shipped with most compilers as part of the C
headers. It takes on different forms in different OSs, but regardless, you can use it to
create a new directory. There is no standard C++, portable way to create a directory.
Check out Example 10-15 to see
how.
Example 10-15. Creating a directory
#include <iostream>
#include <direct.h>
int main(int argc, char** argv) {
if (argc < 2) {
std::cerr << "Usage: " << argv[0] << " [new dir name]\n";
return(EXIT_FAILURE);
}
if (mkdir(argv[1]) == -1) { // Create the directory
std::cerr << "Error: " << strerror(errno);
return(EXIT_FAILURE);
}
}Discussion
The system call for creating directories differs somewhat from one OS to another, but
don’t let that stop you from using it anyway. Variations of mkdir are supported on most systems, so creating a directory is just a matter
of knowing which header to include and what the function’s signature looks like.
Example 10-15 works on Windows, but
not Unix. On Windows, mkdir is declared in <direct.h>. It takes one parameter (the directory name),
returns -1 if there is an error, and sets errno to the corresponding error number. You can get the
implementation-defined error text by calling strerror
or perror.
On Unix, mkdir is declared in <sys/stat.h>, and its signature is slightly different. The ...