![É possível criar um diretório multinível?](https://rvso.com/image/31667/%C3%89%20poss%C3%ADvel%20criar%20um%20diret%C3%B3rio%20multin%C3%ADvel%3F%20.png)
Usando mkdir()
(a função C), posso criar um diretório de 1 nível, se quiser criar um diretório multi_nível como:
folder/subfolder/subsubfolder
É possível? se sim, como?
Responder1
mkdir --parents folder/subfolder/subsubfolder
mkdir -p folder/subfolder/subsubfolder
Responder2
mkdir -p /dir1/dir2/dir3
Por favor, verifique a página de manual para obter detalhes:
man mkdir
Responder3
Algo como:
#include <libgen.h>
// safe
void mkdir_recursive(const char *path)
{
char *subpath, *fullpath;
fullpath = strdup(path);
subpath = dirname(fullpath);
if (strlen(subpath) > 1)
mkdir_recursive(subpath);
mkdir(path);
free(fullpath);
}
ou:
#include <string.h>
// only pass a path starting with a trailing slash
// (if path starts with a dot, it will loop and crash)
void mkdir_recursive(const char *path)
{
char *subpath, *fullpath;
fullpath = strdup(path);
subpath = basename(fullpath);
if (strlen(subpath) > 0)
mkdir_recursive(subpath);
mkdir(path);
free(fullpath);
}
A primeira maneira deve sempre funcionar. A segunda maneira só deve funcionar se o seu caminho começar com uma barra final, porque ele fará um loop em caminhos que começam com um ponto.
Responder4
Caso -p
não esteja disponível, as listas de argumentos são normalmente analisadas na ordem em que aparecem na linha de comando, assim:
mkdir adam adam/bertil adam/bertil/caesar
é funcionalmente equivalente a
mkdir -p adam/bertil/caesar