Files and folders cannot end with dots
This commit is contained in:
parent
2eaac6acc2
commit
cbc61f5a2d
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<Version>6.7.2.1</Version>
|
<Version>6.7.3.1</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -139,7 +139,7 @@ namespace FileManager
|
|||||||
return path[0] + remainder;
|
return path[0] + remainder;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string removeInvalidWhitespace_pattern { get; } = $@"\s*\{Path.DirectorySeparatorChar}\s*";
|
private static string removeInvalidWhitespace_pattern { get; } = $@"[\s\.]*\{Path.DirectorySeparatorChar}\s*";
|
||||||
private static Regex removeInvalidWhitespace_regex { get; } = new(removeInvalidWhitespace_pattern, RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
|
private static Regex removeInvalidWhitespace_regex { get; } = new(removeInvalidWhitespace_pattern, RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
|
||||||
|
|
||||||
/// <summary>no part of the path may begin or end in whitespace</summary>
|
/// <summary>no part of the path may begin or end in whitespace</summary>
|
||||||
@ -149,14 +149,20 @@ namespace FileManager
|
|||||||
// replace whitespace around path slashes
|
// replace whitespace around path slashes
|
||||||
// regex (with space added for clarity)
|
// regex (with space added for clarity)
|
||||||
// \s* \\ \s* => \
|
// \s* \\ \s* => \
|
||||||
fullfilename = fullfilename.Trim();
|
// no ending dots. beginning dots are valid
|
||||||
|
|
||||||
fullfilename = removeInvalidWhitespace_regex.Replace(fullfilename, @"\");
|
// regex is easier by ending with separator
|
||||||
|
fullfilename += Path.DirectorySeparatorChar;
|
||||||
|
fullfilename = removeInvalidWhitespace_regex.Replace(fullfilename, Path.DirectorySeparatorChar.ToString());
|
||||||
|
// take seperator back off
|
||||||
|
fullfilename = RemoveLastCharacter(fullfilename);
|
||||||
|
|
||||||
fullfilename = removeDoubleSlashes(fullfilename);
|
fullfilename = removeDoubleSlashes(fullfilename);
|
||||||
return fullfilename;
|
return fullfilename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string RemoveLastCharacter(this string str) => string.IsNullOrEmpty(str) ? str : str[..^1];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Move file.
|
/// Move file.
|
||||||
/// <br/>- Ensure valid file name path: remove invalid chars, ensure uniqueness, enforce max file length
|
/// <br/>- Ensure valid file name path: remove invalid chars, ensure uniqueness, enforce max file length
|
||||||
|
|||||||
@ -113,4 +113,51 @@ namespace FileUtilityTests
|
|||||||
public void Tests(string input, string expected)
|
public void Tests(string input, string expected)
|
||||||
=> FileUtility.GetStandardizedExtension(input).Should().Be(expected);
|
=> FileUtility.GetStandardizedExtension(input).Should().Be(expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestClass]
|
||||||
|
public class GetValidFilename
|
||||||
|
{
|
||||||
|
[TestMethod]
|
||||||
|
// dot-files
|
||||||
|
[DataRow(@"C:\a bc\x y z\.f i l e.txt")]
|
||||||
|
// dot-folders
|
||||||
|
[DataRow(@"C:\a bc\.x y z\f i l e.txt")]
|
||||||
|
public void Valid(string input) => Tests(input, input);
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
// folder spaces
|
||||||
|
[DataRow(@"C:\ a bc \x y z ", @"C:\a bc\x y z")]
|
||||||
|
// file spaces
|
||||||
|
[DataRow(@"C:\a bc\x y z\ f i l e.txt ", @"C:\a bc\x y z\f i l e.txt")]
|
||||||
|
// eliminate beginning space and end dots and spaces
|
||||||
|
[DataRow(@"C:\a bc\ . . . x y z . . . \f i l e.txt", @"C:\a bc\. . . x y z\f i l e.txt")]
|
||||||
|
// file end dots
|
||||||
|
[DataRow(@"C:\a bc\x y z\f i l e.txt . . .", @"C:\a bc\x y z\f i l e.txt")]
|
||||||
|
public void Tests(string input, string expected)
|
||||||
|
=> FileUtility.GetValidFilename(input).Should().Be(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestClass]
|
||||||
|
public class RemoveLastCharacter
|
||||||
|
{
|
||||||
|
[TestMethod]
|
||||||
|
public void is_null() => Tests(null, null);
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void empty() => Tests("", "");
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void single_space() => Tests(" ", "");
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void multiple_space() => Tests(" ", " ");
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
[DataRow("1", "")]
|
||||||
|
[DataRow("1 ", "1")]
|
||||||
|
[DataRow("12", "1")]
|
||||||
|
[DataRow("123", "12")]
|
||||||
|
public void Tests(string input, string expected)
|
||||||
|
=> FileUtility.RemoveLastCharacter(input).Should().Be(expected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user