XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8
namespace XFESystem.Core;

/// <summary>The public namespace of the new system, independent of its backing disk format.</summary>
public static class SystemPaths
{
    public const string Root = "X:\\";
    public const string System = "X:\\System";
    public const string Configuration = "X:\\System\\Configuration";
    public const string Programs = "X:\\Programs";
    public const string Users = "X:\\Users";
    public const string Desktop = "X:\\Users\\Default\\Desktop";
    public const string Documents = "X:\\Users\\Default\\Documents";
    public const string Downloads = "X:\\Users\\Default\\Downloads";
    public const string Temporary = "X:\\Temporary";

    public static string Normalize(string path)
    {
        ArgumentNullException.ThrowIfNull(path);
        if (path.Length > 1024 || path.Length < 3 || char.ToUpperInvariant(path[0]) != 'X' || path[1] != ':' || path[2] != '\\')
            throw new ArgumentException("Expected an absolute XFESystem path such as X:\\Users\\Default\\Documents.", nameof(path));
        var parts = path[3..].Split('\\', StringSplitOptions.RemoveEmptyEntries);
        var result = Root;
        foreach (var part in parts)
        {
            if (part is "." or ".." || part.EndsWith(' ') || part.EndsWith('.') || part.Length > 128)
                throw new ArgumentException("Invalid path component.", nameof(path));
            foreach (char c in part)
                if (char.IsControl(c) || c is '/' or ':' or '*' or '?' or '"' or '<' or '>' or '|')
                    throw new ArgumentException("Invalid path character.", nameof(path));
            result += (result.Length > 3 ? "\\" : "") + part;
        }
        return result;
    }

    public static string Parent(string path)
    {
        path = Normalize(path);
        int separator = path.LastIndexOf('\\');
        return separator <= 2 ? Root : path[..separator];
    }

    public static string Name(string path)
    {
        path = Normalize(path);
        return path.Length == 3 ? "XFESystem (X:)" : path[(path.LastIndexOf('\\') + 1)..];
    }

    public static string Combine(string directory, string name) => Normalize(Normalize(directory).TrimEnd('\\') + "\\" + name);
}