Tài liệu

Thư mục

Thời gian đọc 3 phút Gói: Nalix.Environment
Trên trang này

Không gian tên: Nalix.Environment.IO
Assembly: Nalix.Environment

Directories là một tiện ích tĩnh an toàn đa luồng, dùng để phân giải, tạo và tăng cường quyền cho các thư mục ứng dụng trên Windows, Linux, macOS và môi trường container (Docker/Kubernetes).

Ánh xạ mã nguồn

  • 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

Thứ tự ưu tiên phân giải đường dẫn

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

Thuộc tính công khai

Thuộc tínhGhi đè bằng biến môi trườngVolume containerĐường dẫn mặc định (tương đối với BaseAssetsDirectory)Chế độ Unix
IsRunningInContainerDOTNET_RUNNING_IN_CONTAINER / KUBERNETES_SERVICE_HOST—Nhận diện qua các dấu hiệu /.dockerenv và /proc/1/cgroup—
BaseAssetsDirectoryNALIX_BASE_PATH/dataWindows: %ProgramData%\Nalix
Unix: $XDG_DATA_HOME/Nalix hoặc ~/.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 (tự động xóa các file cũ hơn NALIX_TEMP_RETENTION_DAYS, mặc định 7 ngày)0700
CacheDirectory——<DataDirectory>/caches0755
UploadsDirectory——<DataDirectory>/uploads0750
BackupsDirectory——<DataDirectory>/backups0700

Phương thức công khai

Phương thứcChữ kýMô tả
GetFilePathpublic static string GetFilePath(string directoryPath, string fileName)Ghép directoryPath và fileName đồng thời chặn path traversal (ném UnauthorizedAccessException nếu fileName thoát khỏi directoryPath).
TryWriteNewFilepublic static bool TryWriteNewFile(string path, string content, bool isPrivate = true)Tạo và ghi content vào một file mới một cách nguyên tử (áp dụng 0600 trên Unix khi isPrivate = true); trả về false nếu file đã tồn tại.
DeleteOldFilespublic static int DeleteOldFiles(string directoryPath, TimeSpan maxAge, string searchPattern = "*")Xóa các file cũ hơn maxAge khớp với searchPattern và trả về số file đã xóa.
CanAccessAllDirectoriespublic static bool CanAccessAllDirectories()Kiểm tra quyền ghi trên mọi thư mục được quản lý bằng cách đọc ACL của hệ điều hành trên Windows (GetAccessRules) và access(path, W_OK) trên Unix, không ghi file tạm.
SetBasePathOverridepublic static void SetBasePathOverride(string path)Ghi đè BaseAssetsDirectory cho các unit/integration test được cô lập và đặt lại mọi cache thư mục lazy.

Ví dụ sử dụng

using System;
using Nalix.Environment.IO;

// Phân giải một đường dẫn file an toàn bên trong ConfigurationDirectory
string configPath = Directories.GetFilePath(Directories.ConfigurationDirectory, "server.ini");

// Dọn các file log cũ hơn 30 ngày
int removed = Directories.DeleteOldFiles(Directories.LogsDirectory, TimeSpan.FromDays(30), "*.log");

API liên quan