package fileutil import ( "crypto/sha256" "encoding/hex" "fmt" "io" "os" ) func EnsureDir(path string) error { info, err := os.Stat(path) if os.IsNotExist(err) { return os.MkdirAll(path, 0755) } if err != nil { return err } if !info.IsDir() { return fmt.Errorf("file already exists at %s", path) } return nil } func FileExists(path string) bool { info, err := os.Stat(path) return err == nil && !info.IsDir() } func DeleteFile(path string) error { if !FileExists(path) { return nil } return os.Remove(path) } func GetFileHash(path string) (string, error) { file, err := os.Open(path) if err != nil { return "", err } defer file.Close() h := sha256.New() if _, err := io.Copy(h, file); err != nil { return "", err } return hex.EncodeToString(h.Sum(nil)), nil }