|
此程序适用于linux平台,可以在命令行参数指定每一层创建目录数,以及指定创建的目录的深度。算法如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define MAX_PATH 1024
void create_dir (char **dir_pre, char **dir_suf, int dir_levs, int dir_per, int levpre)
{
int levindex = 0;
int perindex = 0;
int dir_created_flag = 0;
char current_dir[MAX_PATH];
char dir_bak[10][MAX_PATH];
char dir_buf[MAX_PATH];
int i;
while (levindex < dir_levs && dir_created_flag == 0) {
getcwd (current_dir, MAXPATH);
strcpy (dir_buf, current_dir);
for (i = 0; i < dir_per; i++) {
strcat (current_dir, dir_pre[levpre]);
strcat (current_dir, dir_suf[i]);
if (mkdir(current_dir, 0755) == -1) {
perror ("mkdir");
exit (EXIT_FAILURE);
}
strcpy (dir_bak[i], current_dir);
strcpy (current_dir, dir_buf);
}
dir_created_flag = 1;
while (perindex < dir_per) {
chdir (dir_bak[perindex]);
perindex += 1;
levpre += 1;
create_dir (dir_pre, dir_suf, dir_levs-1, dir_per, levpre);
levpre -= 1;
}
}
}
int main (int argc, char **argv)
{
char *dir_pre[10] = {"/lev_1_", "/lev_2_", "/lev_3_", "/lev_4_", "/lev_5_", "/lev_6_", "/lev_7_", "/lev_8_", "/lev_9_", "/lev_10_"};
char *dir_suf[10] = {"dir_1", "dir_2", "dir_3", "dir_4", "dir_5", "dir_6", "dir_7", "dir_8", "dir_9", "dir_10"};
int dir_levs;
int dir_per;
if (argc != 3) {
printf ("usage: ./main dir_levs dir_per\n");
exit (EXIT_FAILURE);
}
dir_levs = atoi (argv[1]);
dir_per = atoi (argv[2]);
if ( dir_levs < 0 || dir_levs > 10 ) {
printf ("dir_levs can not less than 0 or greater than 10!\n");
exit (EXIT_FAILURE);
}
if ( dir_per < 0 || dir_per > 10) {
printf ("dir_per can not less than 0 or greater than 10!\n");
exit (EXIT_FAILURE);
}
create_dir (dir_pre, dir_suf, dir_levs, dir_per, 0);
printf ("-----Create all directory successfully!-----\n\n");
return (0);
} |
|