我尝试编写一个完成上述工作的程序,并发现以下一个可以工作。
您可以使用strtok()
从输入中提取所有单独的目录并申请
mkdir()
每个子目录。最后一个字符串/
是文件名,我不知道是否有更好的方法来使用 strtok() 解析字符串:我调用函数 countChars() (借用自https://stackoverflow. com/a/4235545/1024474)确定/
路径中的数量以获得要创建的文件夹的数量,并相应地使用while
循环来创建目录。
最后,我使用 creat() 以指定路径的文件名创建一个文件。在您的代码中,您会将原始文件的内容复制到新文件中。
以下代码假设您已经在预定backup/
文件夹中,并且路径类似于users/username/documents/folder/file.txt
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int countChars( char* s, char c )
{
return *s == '\0'
? 0
: countChars( s + 1, c ) + (*s == c);
}
int main(int argc, char **argv) {
mode_t mode = S_IRWXU;
umask(0);
char buffer[512];
char *b;
char c[512];
int n, i=0;
strcpy(buffer, argv[1]);
n = countChars(buffer, '/');
printf("%d\n", n);
b = strtok(buffer, "/");
while (i<n)
{
i++;
printf("%s\n", b);
if (mkdir(b, mode) == -1) {
printf("error when creating dir\n");
}
chdir(b);
b = strtok(NULL, "/");
}
if (creat(b, mode) == -1) {
printf("error when creating file\n");
}
return 0;
}
如果文件夹已经存在,程序会打印错误(即通知),但会继续。