filepath.Dir în Go

Returnează partea de director a unei căi: tot ce este înainte de ultimul element.

Sintaxă
func Dir(path string) string

Ce face filepath.Dir

filepath.Dir elimină ultimul element și curăță rezultatul cu Clean. Pentru o cale fără separator (doar un nume de fișier) returnează ".", adică directorul curent. Pentru o cale goală returnează tot ".".

Este utilă înainte de a crea un fișier: os.MkdirAll(filepath.Dir(cale), 0o755) creează directorul în care va sta fișierul.

Parametri

Parametru Descriere
path Calea.

Ce returnează

Directorul care conține ultimul element.

Exemple

Exemplul 1: Partea de director

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    for _, c := range []string{"/home/ana/cv.pdf", "poze/vacanta/mare.jpg", "nota.txt", "/etc/", "/"} {
        fmt.Printf("%-24q -> %q\n", c, filepath.Dir(c))
    }
}

Rezultat

"/home/ana/cv.pdf"       -> "/home/ana"
"poze/vacanta/mare.jpg"  -> "poze/vacanta"
"nota.txt"               -> "."
"/etc/"                  -> "/etc"
"/"                      -> "/"

Exemplul 2: Creare automată a directorului

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

func salveaza(cale string, date []byte) error {
    if err := os.MkdirAll(filepath.Dir(cale), 0o755); err != nil {
        return err
    }
    return os.WriteFile(cale, date, 0o644)
}

func main() {
    err := salveaza("export/2025/martie/clienti.csv", []byte("Ana,Iași\n"))
    fmt.Println("eroare:", err)
    date, _ := os.ReadFile("export/2025/martie/clienti.csv")
    fmt.Print(string(date))
}

Rezultat

eroare: <nil>
Ana,Iași

Greșeli frecvente

  • Te aștepți ca Dir("poze/vacanta/") să dea poze. Cu / final, ultimul element este gol, deci rezultatul este poze/vacanta.

Comenzi înrudite

  • filepath.Base: Returnează ultimul element al unei căi: numele fișierului (sau al ultimului director).
  • filepath.Split: Împarte o cale în director (cu separatorul final) și numele fișierului.
  • os.MkdirAll: Creează un director împreună cu toți părinții care lipsesc; nu dă eroare dacă directorul există deja.