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);
}
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);
}