# How to Open a folder or file and if it doesn't exists create the folder/file

**URL:** <https://ziggit.dev/t/how-to-open-a-folder-or-file-and-if-it-doesnt-exists-create-the-folder-file/17922>\
**Category:** Help\
**Tags:** language\
**Created:** [October 11, 2026, 3:28pm UTC](https://ziggit.dev/t/how-to-open-a-folder-or-file-and-if-it-doesnt-exists-create-the-folder-file/17922 "2026-10-11T15:28:18Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![vic1500](https://ziggit.dev/user_avatar/ziggit.dev/vic1500/32/9702_2.png) [@vic1500](https://ziggit.dev/u/vic1500)\
**Post date:** [October 11, 2026, 3:28pm UTC](https://ziggit.dev/t/how-to-open-a-folder-or-file-and-if-it-doesnt-exists-create-the-folder-file/17922/1 "2026-10-11T15:28:19Z")

</div>

So I’m working on a program that needs to open a folder and if the folder doesn’t exists it creates it, but I’m stuck as it is. this is my code.

```zig
pub fn setProjectHome(io: std.Io, env: *std.process.Environ.Map) !void {
    const home_env = env.get("HOME") orelse return error.NoHomeDirectory;
    const home_dir = try std.Io.Dir.openDirAbsolute(io, home_env, .{});
    defer home_dir.close(io);

    const zproj_dir = home_dir.openDir(io, ".config/zproj", .{}) catch |err| switch (err) {
        error.FileNotFound => home_dir.createDir(io, ".config/zproj", .default_dir) catch |create_err| switch (create_err) {
            error.PathAlreadyExists => std.debug.print("Project Path already exists", .{}),
            else => std.debug.print("Error: {any}", .{create_err}),
        },
        else => std.debug.print("Error: {any}", .{err}),
    };
    defer zproj_dir.close(io);

    const zproj_config_file = zproj_dir.openFile(io, "config.txt", .{}) catch |err| switch (err) {
        error.PathAlreadyExists => zproj_dir.createFile(io, "config.txt", .{}),
        else => std.debug.print("Error: {any}", .{err}),
    };
    defer zproj_config_file.close(io);

    var buffer: [1024]u8 = undefined;
    _ = try zproj_config_file.readPositionalAll(io, &buffer, 0);
}

```

I would like some help please and I’m also using zig 0.16 by the way. Thank you 🙏

PS: You can ignore the buffer file part

---

<div class="post-metadata">

**Author:** ![pasta](https://ziggit.dev/user_avatar/ziggit.dev/pasta/32/6273_2.png) [@pasta](https://ziggit.dev/u/pasta)\
**Post date:** [October 11, 2026, 3:32pm UTC](https://ziggit.dev/t/how-to-open-a-folder-or-file-and-if-it-doesnt-exists-create-the-folder-file/17922/2 "2026-10-11T15:32:16Z")

</div>

What’s got you stuck, that seems sensible enough?

If not, may be best to simply “ensure” the directory exists first with a call to create and handle the error.

---

<div class="post-metadata">

**Author:** ![xjlqr](https://ziggit.dev/letter_avatar_proxy/v4/letter/x/b782af/32.png) [@xjlqr](https://ziggit.dev/u/xjlqr)\
**Post date:** [October 11, 2026, 3:35pm UTC](https://ziggit.dev/t/how-to-open-a-folder-or-file-and-if-it-doesnt-exists-create-the-folder-file/17922/3 "2026-10-11T15:35:02Z")

</div>

That’s what [`std.Io.Dir.createDirPathOpen`](https://ziglang.org/documentation/0.16.0/std/#std.Io.Dir.createDirPathOpen) is for. Create a directory if it does not already exist, and give you the directory handle for performing file operations inside it.

---

<div class="post-metadata">

**Author:** ![vic1500](https://ziggit.dev/user_avatar/ziggit.dev/vic1500/32/9702_2.png) [@vic1500](https://ziggit.dev/u/vic1500)\
**Post date:** [October 11, 2026, 3:36pm UTC](https://ziggit.dev/t/how-to-open-a-folder-or-file-and-if-it-doesnt-exists-create-the-folder-file/17922/4 "2026-10-11T15:36:45Z")

</div>

This is actually sensible. I’ve been coding for hours now. My brain feels like mush such that I didn’t see such an obvious answer 🥲

Thank you

---

<div class="post-metadata">

**Author:** ![vic1500](https://ziggit.dev/user_avatar/ziggit.dev/vic1500/32/9702_2.png) [@vic1500](https://ziggit.dev/u/vic1500)\
**Post date:** [October 11, 2026, 3:37pm UTC](https://ziggit.dev/t/how-to-open-a-folder-or-file-and-if-it-doesnt-exists-create-the-folder-file/17922/5 "2026-10-11T15:37:27Z")

</div>

Oh okay. Thank you very much
