由于工作需要很多次都是需要一次性创建很多目录(比如: 001 到 999 个目录),之前用的方法都比较stupid(一个一个的鼠标右键新建文件夹,然后重命名·······)一直想自己写一个程序来解决这种问题,问题是死的,可人是活的,于是,动手干。
我使用的环境是Ubuntu12.04,语言:C ;
程序的源码
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <errno.h>
int create_dir(int num)
{
int i = 1;
int err = 0;
char arr[10] = {0};
char *p = arr;
int create_folder_fail_max = 0; //创建文件夹最大失败次数
char array[20] = "/home/chen/ME/";
char arr_memo[20];
extern int errno;
int judge_time = 0;
strcpy(arr_memo, array);
for(i = 1; i <= num ;i++)
{
p = arr;
if(i < 100)
{
if(i < 10)
{
//printf("%d\n", i);
*p = '0';
*(++p) = '0';
sprintf(arr + 2, "%d", i);
printf("%s,", arr);
}
else
{
*p = '0';
sprintf(arr + 1, "%d", i);
}
}
else
sprintf(arr, "%d", i);
strncat(array, arr, 3); //利用strcat追加到字符串中
printf("%s\n", array);
err = mkdir(array, S_IRWXU | S_IRGRP | S_IROTH);
strcpy(array, arr_memo);
judge_time++;
if((17 == errno) && (-1 == err) && ((create_folder_fail_max++) < 5))
{
printf("the folder was exist! remaining time is %d.\n", (5 - create_folder_fail_max));
if(create_folder_fail_max == judge_time)
{
printf("the target floder had been created, please check\n");
}
continue;
}
else if(0 == err)
{
printf("the folder %s was created OK!!!\n", arr);
}
else
{
printf("error!!!\n");
return -1;
}
}
//printf("%d\n", create_folder_fail_max);
if(create_folder_fail_max == judge_time)
printf("ALL target folder had been created, check it\n");
else
printf("ALL folders was created OK!!!\n");
return 0;
}
int main(int argc, char *argv[])
{
//char arr[10] = {}
int num = 0;
printf("请输入文件夹个数!\n");
scanf("%d", &num);
if(-1 == create_dir(num))
{
printf("create failed, Please check\n");
}
return 0;
}
其中只是涉及到了mkdir() 这个函数,路径 /home/chen/ME 是自己设置的,由于此程序已经能够实现我所想要实现的基本目标,遂没有在深入进行扩展和优化。
在写这个程序的时候我犯了一个很严重的错误,在mkdir的 路径变量中我一直在路径上加 " ", 如 "array" 造成不管array的变量是什么都只产生 array这个文件夹,在此以我的教训给大家提个醒。
最后 本小程序只是对自己的学习路程进行一个记录,绝无他意, 谢谢!