added IOPath double separator removal
This commit is contained in:
parent
dc35725b64
commit
386d71260c
@ -2,7 +2,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<!--package info-->
|
<!--package info-->
|
||||||
<PackageId>DTLib</PackageId>
|
<PackageId>DTLib</PackageId>
|
||||||
<Version>1.6.4</Version>
|
<Version>1.6.5</Version>
|
||||||
<Authors>Timerix</Authors>
|
<Authors>Timerix</Authors>
|
||||||
<Description>Library for all my C# projects</Description>
|
<Description>Library for all my C# projects</Description>
|
||||||
<RepositoryType>GIT</RepositoryType>
|
<RepositoryType>GIT</RepositoryType>
|
||||||
|
|||||||
@ -15,29 +15,40 @@ public readonly struct IOPath
|
|||||||
|
|
||||||
public IOPath(char[] path, bool separatorsFixed=false)
|
public IOPath(char[] path, bool separatorsFixed=false)
|
||||||
{
|
{
|
||||||
|
if (path.Length == 0)
|
||||||
|
throw new Exception("path is null or empty");
|
||||||
Str = separatorsFixed ? new string(path) : FixSeparators(path);
|
Str = separatorsFixed ? new string(path) : FixSeparators(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IOPath(string path, bool separatorsFixed=false)
|
public IOPath(string path, bool separatorsFixed=false) : this(path.ToCharArray(), separatorsFixed)
|
||||||
{
|
{
|
||||||
if (path.IsNullOrEmpty())
|
|
||||||
throw new Exception("path is null or empty");
|
|
||||||
Str = separatorsFixed ? path : FixSeparators(path.ToCharArray());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static string FixSeparators(char[] path)
|
static string FixSeparators(char[] path)
|
||||||
{
|
{
|
||||||
int length = path.Length;
|
int length = path.Length;
|
||||||
if (path[length-1] == Path.Sep || path[length-1] == Path.NotSep)
|
char lastChar = path[path.Length - 1];
|
||||||
|
if (lastChar == Path.Sep || lastChar == Path.NotSep)
|
||||||
length--; // removing trailing sep
|
length--; // removing trailing sep
|
||||||
char[] fixed_path = new char[length];
|
StringBuilder sb = new StringBuilder();
|
||||||
|
bool prevWasSeparator = false;
|
||||||
for (int i = 0; i < length; i++)
|
for (int i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
if (path[i] == Path.NotSep)
|
if (path[i] == Path.NotSep)
|
||||||
fixed_path[i] = Path.Sep;
|
{
|
||||||
else fixed_path[i] = path[i];
|
// prevent double separators like this "a//b"
|
||||||
|
if(!prevWasSeparator)
|
||||||
|
sb.Append(Path.Sep);
|
||||||
|
prevWasSeparator = true;
|
||||||
}
|
}
|
||||||
return new string(fixed_path);
|
else
|
||||||
|
{
|
||||||
|
sb.Append(path[i]);
|
||||||
|
prevWasSeparator = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IOPath[] ArrayCast(string[] a, bool separatorsFixed=false)
|
public static IOPath[] ArrayCast(string[] a, bool separatorsFixed=false)
|
||||||
|
|||||||
@ -96,10 +96,13 @@ public static class Path
|
|||||||
/// returns just dir name or file name with extension
|
/// returns just dir name or file name with extension
|
||||||
public static IOPath LastName(this IOPath path)
|
public static IOPath LastName(this IOPath path)
|
||||||
{
|
{
|
||||||
|
if(path.Length < 2)
|
||||||
|
return path;
|
||||||
int i = path.LastIndexOf(Sep);
|
int i = path.LastIndexOf(Sep);
|
||||||
if (i == path.Length - 1) // ends with separator
|
if (i == path.Length - 1) // ends with separator
|
||||||
i = path.LastIndexOf(Sep, i - 1);
|
i = path.LastIndexOf(Sep, i - 1);
|
||||||
if (i == -1) return path;
|
if (i == -1)
|
||||||
|
return path;
|
||||||
return path.Substring(i + 1);
|
return path.Substring(i + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user