C语言 批量创建空文件夹
抽空余时间写了一天。写出来了,转载请标注,请尊重原创!
问题描述:有时候我们可能会需要用到批量创建文件夹来存储不同的文件。
也可能根据程序的需要直接根据特定的字符数组创建文件夹存储文件。
因此在程序的运行中调用creatFile()或者batchcreatFile()函数即可.
#pragma warning (disable:4996)
#include
#include
#include
#include void createFolder(char *folderPath) { //(需要 #include 以及 #include ) //创建单个文件 ------会创建传入的字符最后一级文件,否则失败//文件夹名称char *folderName = folderPath;// 文件夹不存在则创建文件夹if (_access(folderName, 0) == -1){//_access功能:确定文件或文件夹的访问权限。如果指定的存取方式有效,则函数返回0,否则函数返回-1。_mkdir(folderName);printf("创建成功!\n");}else {printf("文件已存在!\n");}}
void handleQuestionMark(char data[])//用于去除fgets读取数据中的\n
{ //在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置 char* find = strchr(data, '?'); //找出data中的"\n"if (find)*find = '\0'; //替换
}
void handleEnterAfterBuf(char buf[])//用于去除fgets读取数据中的\n
{ //在参数 buf所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置 将指针指向这个位置char* find = strchr(buf, '\n'); //找出data中的"\n"if (find) //指针指向内容替换*find = '\0'; //替换
}
void batchCreateFolder(char* folderPath) {//根据批路径创建文件夹--前提需要创建的文件夹上级目录存在FILE* fpin = NULL;char strPath[200] = { 0 };fopen_s(&fpin, folderPath, "r");if (fpin == NULL )printf("Can't open the file\n");while (1){if (feof(fpin))//判断是否读完文件{break;}memset(strPath, 0, 200);fgets(strPath, 200, fpin);//去读一行handleEnterAfterBuf(strPath);createFolder(strPath);}fclose(fpin);
}int checkPath(char* cutAfterPath) {//检查文件夹是否存在,不存在则创建int resrult;resrult = access(cutAfterPath, 0);if(resrult != 0) {//不存在则创建printf("文件夹不存在,创建中...");createFolder(cutAfterPath);printf("文件夹创建成功!\n");}else {printf("文件夹存在:");printf("%s\n", cutAfterPath);return;}}
//根据输入的路径逐层剪切判断是否存在,不存在则创建
void cutpath(char* sourcePath) {//只支持绝对路径char *spath = sourcePath;//源路径int len_spath=strlen(spath);//源路径长度int numOfSlash = 0;//斜杠数目int slashLocation[100] = { 0 };//用于存储斜杠的位置int slashLocationIndex = 0;//斜杠位置的下标int pathIndex = 0;char strcharpath[500] = { 0 };for (int i = 0; i < len_spath;i++) {//统计斜杠数目if (spath[i] == '\\') {numOfSlash++;slashLocation[slashLocationIndex++] = i;//记录斜杠位置} }//根据斜线位置截取数据存储到数组for (int i = 0; i < numOfSlash-1; i++){memset(strcharpath, '?', 500);pathIndex = 0;for (int j = 0; j < slashLocation[i+1]; j++)//第一次拷贝至第二个斜杠的位置,下一次拷贝到第三个斜杠的位置{if (spath[pathIndex != '?']) {strcharpath[j] = spath[pathIndex++];printf("%c", strcharpath[j]);}else{break;} }handleQuestionMark(strcharpath);//给字符数组增加'\0'checkPath(strcharpath);//检查路径是否存在,不存在则创建printf("\n");}checkPath(spath);//创建最后一层文件}
void creatFile(char* Path) {cutpath(Path);
}
void batchcreatFile(char* filePath) {//根据批路径创建文件夹--不需要创建的文件夹上级目录存在FILE* fpin = NULL;char strPath[200] = { 0 };fopen_s(&fpin, filePath, "r");if (fpin == NULL)printf("Can't open the file\n");while (1){if (feof(fpin))//判断是否读完文件{break;}memset(strPath, 0, 200);fgets(strPath, 200, fpin);//去读一行handleEnterAfterBuf(strPath);creatFile(strPath);}fclose(fpin);
}
int main() {//1.创建本字符数组的最后一级文件夹//char path[] = "D:\\WorkSpace\\testFileData\\1";//createFolder(path);//2.根据指定文件的路径创建前提需要创建的文件夹上级路径存在//char txtpath[] = "D:\\WorkSpace\\testFileData\\createFolderData.txt";//batchCreateFolder(txtpath);//3.创建文件路径哪怕某级文件不存在则会创建如下路径文件//char filepath[] = "D:\\WorkSpace\\testFileData\\test\\asf";//creatFile(filepath);//4.根据指定文件的路径创建前提需要创建的文件夹上级路径存在******最终版批创建文件夹*********char txtpath[] = "D:\\WorkSpace\\testFileData\\createFolderData.txt";batchcreatFile(txtpath);
}

createFolderData.txt中内容如上所示。创建上述路径,也可单独调用creatFile()函数创建如
char filepath[] = “D:\WorkSpace\testFileData\test\asf”;这样的路径
效果图;


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
