Directories

Read time 3 minutes Package: Nalix.Environment
On this page

Namespace: Nalix.Environment.IO
Assembly: Nalix.Environment

Directories is a thread-safe static utility that resolves, creates, and hardens application directories across Windows, Linux, macOS, and container (Docker/Kubernetes) environments.

Source Mapping

  • src/Nalix.Environment/IO/Directories.Lazy.cs
  • src/Nalix.Environment/IO/Directories.Properties.cs
  • src/Nalix.Environment/IO/Directories.PublicMethods.cs
  • src/Nalix.Environment/IO/Directories.UnixDirPerms.cs

Path Resolution Priority

Architecture Diagram
flowchart TD
    Start(["Access Directories.* Property"]) --> Override{"SetBasePathOverride Set?"}
    Override -->|Yes| BaseOverride["Use Override Base Path"]
    Override -->|No| EnvVar{"NALIX_*_PATH Env Var Set?"}
    EnvVar -->|Yes| UseEnv["Use Environment Variable Path"]
    EnvVar -->|No| Container{"IsRunningInContainer?"}
    Container -->|Yes & Volume Mounted| UseContainer["Use /data, /logs, /config, /tmp, /storage, /db"]
    Container -->|No| OSFallback["Resolve under BaseAssetsDirectory"]
    BaseOverride --> Harden["Create Directory & Apply Unix Permissions"]
    UseEnv --> Harden
    UseContainer --> Harden
    OSFallback --> Harden

Public Properties

PropertyEnv Variable OverrideContainer VolumeDefault Path (BaseAssetsDirectory Relative)Unix Mode
IsRunningInContainerDOTNET_RUNNING_IN_CONTAINER / KUBERNETES_SERVICE_HOST—Detects /.dockerenv and /proc/1/cgroup markers—
BaseAssetsDirectoryNALIX_BASE_PATH/dataWindows: %ProgramData%\Nalix
Unix: $XDG_DATA_HOME/Nalix or ~/.local/share/Nalix
0750
LogsDirectoryNALIX_LOGS_PATH/logs<BaseAssetsDirectory>/logs0755
DataDirectoryNALIX_DATA_PATH/data<BaseAssetsDirectory>/data0755
ConfigurationDirectoryNALIX_CONFIG_PATH/config<BaseAssetsDirectory>/config0700
StorageDirectoryNALIX_STORAGE_PATH/storage<BaseAssetsDirectory>/storage0750
DatabaseDirectoryNALIX_DB_PATH/db<BaseAssetsDirectory>/db0700
TemporaryDirectoryNALIX_TEMP_PATH/tmp<BaseAssetsDirectory>/data/tmp (auto-purges files older than NALIX_TEMP_RETENTION_DAYS, default 7 days)0700
CacheDirectory——<DataDirectory>/caches0755
UploadsDirectory——<DataDirectory>/uploads0750
BackupsDirectory——<DataDirectory>/backups0700

Public Methods

MethodSignatureDescription
GetFilePathpublic static string GetFilePath(string directoryPath, string fileName)Combines directoryPath and fileName while enforcing path-traversal guards (throws UnauthorizedAccessException if fileName escapes directoryPath).
TryWriteNewFilepublic static bool TryWriteNewFile(string path, string content, bool isPrivate = true)Atomically creates and writes content to a new file (applying 0600 on Unix when isPrivate = true); returns false if the file already exists.
DeleteOldFilespublic static int DeleteOldFiles(string directoryPath, TimeSpan maxAge, string searchPattern = "*")Deletes files older than maxAge matching searchPattern and returns the number of deleted files.
CanAccessAllDirectoriespublic static bool CanAccessAllDirectories()Verifies write permissions across all managed directories using OS ACL inspection on Windows (GetAccessRules) and access(path, W_OK) on Unix without writing temporary files.
SetBasePathOverridepublic static void SetBasePathOverride(string path)Overrides BaseAssetsDirectory for isolated unit/integration tests and resets all lazy directory caches.

Usage Example

using System;
using Nalix.Environment.IO;

// Resolve a safe file path inside ConfigurationDirectory
string configPath = Directories.GetFilePath(Directories.ConfigurationDirectory, "server.ini");

// Clean up log files older than 30 days
int removed = Directories.DeleteOldFiles(Directories.LogsDirectory, TimeSpan.FromDays(30), "*.log");