67 lines
2.0 KiB
C#
Executable File
67 lines
2.0 KiB
C#
Executable File
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace WeChatWASM.MDV
|
|
{
|
|
public static class Utils
|
|
{
|
|
//------------------------------------------------------------------------------
|
|
// path combine with basic normalization (reduces '.' and '..' relative paths)
|
|
|
|
static char[] separators = new char[] { '/', '\\' };
|
|
|
|
public static string PathCombine( string _a, string _b, string separator = "/" )
|
|
{
|
|
var a = (_a ?? "").Split( separators, StringSplitOptions.RemoveEmptyEntries );
|
|
var b = (_b ?? "").Split( separators, StringSplitOptions.RemoveEmptyEntries );
|
|
|
|
var combined = a.Concat( b ).Where( el => el != "." );
|
|
|
|
var path = new List<string>();
|
|
|
|
foreach( var el in combined )
|
|
{
|
|
if( el != ".." )
|
|
{
|
|
path.Add( el );
|
|
}
|
|
else if( path.Count > 0 )
|
|
{
|
|
path.RemoveAt( path.Count - 1 );
|
|
}
|
|
}
|
|
|
|
return string.Join( separator, path.ToArray() );
|
|
}
|
|
|
|
public static string PathNormalise( string _a, string separator = "/" )
|
|
{
|
|
var a = (_a ?? "").Split( separators, StringSplitOptions.RemoveEmptyEntries );
|
|
|
|
var path = new List<string>();
|
|
|
|
foreach( var el in a )
|
|
{
|
|
if( el == "." )
|
|
{
|
|
continue;
|
|
}
|
|
if( el != ".." )
|
|
{
|
|
path.Add( el );
|
|
}
|
|
else if( path.Count > 0 )
|
|
{
|
|
path.RemoveAt( path.Count - 1 );
|
|
}
|
|
}
|
|
|
|
return string.Join( separator, path.ToArray() );
|
|
}
|
|
}
|
|
}
|
|
|