---
title: "Como Criar Diretórios em Zig"
url: "https://ziglang.com.br/receitas/como-criar-diret%C3%B3rios-em-zig/"
markdown_url: "https://ziglang.com.br/receitas/como-criar-diret%C3%B3rios-em-zig.MD"
description: "Aprenda a criar diretórios simples e aninhados em Zig usando std.fs. Criação recursiva, permissões e tratamento de erros completo."
date: "2026-02-21"
author: "Zig Brasil"
---

# Como Criar Diretórios em Zig

Aprenda a criar diretórios simples e aninhados em Zig usando std.fs. Criação recursiva, permissões e tratamento de erros completo.


# Como Criar Diretórios em Zig

Criar diretórios é uma operação essencial para organizar arquivos, preparar ambientes de execução e estruturar projetos. Zig oferece funções na biblioteca padrão para criação de diretórios simples e aninhados.

## Criar Diretório Simples

```zig
const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();

    // Criar um diretório
    try std.fs.cwd().makeDir("meu_diretorio");
    try stdout.print("Diretório 'meu_diretorio' criado!\n", .{});
}
```

## Criar Diretórios Aninhados (Recursivo)

Use `makePath` para criar toda a cadeia de diretórios de uma vez.

```zig
const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();

    // Criar diretórios aninhados de uma vez
    try std.fs.cwd().makePath("projeto/src/modulos/util");
    try stdout.print("Caminho 'projeto/src/modulos/util' criado!\n", .{});

    // Criar outra estrutura
    try std.fs.cwd().makePath("projeto/tests/integracao");
    try stdout.print("Caminho 'projeto/tests/integracao' criado!\n", .{});

    try std.fs.cwd().makePath("projeto/docs/api");
    try stdout.print("Caminho 'projeto/docs/api' criado!\n", .{});
}
```

## Tratar Erro de Diretório Existente

```zig
const std = @import("std");

fn criarDiretorioSeguro(caminho: []const u8) !void {
    std.fs.cwd().makeDir(caminho) catch |err| {
        switch (err) {
            error.PathAlreadyExists => {
                // Diretório já existe, tudo bem
                return;
            },
            else => return err,
        }
    };
}

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();

    // Criar diretório (seguro se já existir)
    try criarDiretorioSeguro("minha_pasta");
    try stdout.print("Diretório garantido: 'minha_pasta'\n", .{});

    // Chamar novamente não causa erro
    try criarDiretorioSeguro("minha_pasta");
    try stdout.print("Chamado novamente sem erro\n", .{});
}
```

## Criar Diretório com Caminho Absoluto

```zig
const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();

    // Criar diretório em caminho absoluto
    try std.fs.makeDirAbsolute("/tmp/zig_teste");
    try stdout.print("Diretório criado em /tmp/zig_teste\n", .{});

    // Criar caminho aninhado absoluto
    try std.fs.makeDirAbsolute("/tmp/zig_teste/sub1");
    try stdout.print("Subdiretório criado\n", .{});
}
```

## Exemplo Prático: Criar Estrutura de Projeto

```zig
const std = @import("std");

fn criarEstruturaProjeto(nome: []const u8) !void {
    const cwd = std.fs.cwd();

    const diretorios = [_][]const u8{
        "src",
        "src/models",
        "src/controllers",
        "src/views",
        "tests",
        "tests/unit",
        "tests/integration",
        "docs",
        "config",
        "scripts",
    };

    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    for (diretorios) |subdir| {
        const caminho = try std.fmt.allocPrint(allocator, "{s}/{s}", .{ nome, subdir });
        defer allocator.free(caminho);
        try cwd.makePath(caminho);
    }
}

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();

    try criarEstruturaProjeto("meu-app");
    try stdout.print("Estrutura do projeto 'meu-app' criada!\n", .{});

    // Verificar listando
    var dir = try std.fs.cwd().openDir("meu-app", .{ .iterate = true });
    defer dir.close();

    var iter = dir.iterate();
    try stdout.print("\nConteúdo de 'meu-app/':\n", .{});
    while (try iter.next()) |entrada| {
        try stdout.print("  {s}/\n", .{entrada.name});
    }
}
```

## Criar Diretório Temporário

```zig
const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();

    // Criar diretório temporário
    var tmp_dir = std.testing.tmpDir(.{});
    defer tmp_dir.cleanup();

    // Criar subdiretórios dentro do temporário
    try tmp_dir.dir.makePath("dados/cache");

    // Criar um arquivo dentro
    const arquivo = try tmp_dir.dir.createFile("dados/teste.txt", .{});
    defer arquivo.close();
    try arquivo.writeAll("Conteúdo temporário\n");

    try stdout.print("Diretório temporário criado e utilizado com sucesso!\n", .{});
}
```

## Veja Também

- [Listar Conteúdo de Diretório](/receitas/zig-listar-diretorio/) — Verifique o que foi criado
- [Deletar Arquivos e Diretórios](/receitas/zig-deletar-arquivo/) — Remova diretórios
- [Escrever em Arquivo](/receitas/zig-escrever-arquivo/) — Crie arquivos nos diretórios
- [Manipulação de Caminhos](/receitas/zig-path-manipulacao/) — Construa caminhos programaticamente
