Add some filename length headroom in case of diplicate files and " (n)" suffix.
This commit is contained in:
parent
5815a04712
commit
1b20bb06ad
@ -35,18 +35,24 @@ namespace FileManager
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
file = replaceFileName(file, paramReplacements);
|
|
||||||
fileName = Path.GetDirectoryName(fileName);
|
|
||||||
pathParts.Add(file);
|
pathParts.Add(file);
|
||||||
|
fileName = Path.GetDirectoryName(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pathParts.Reverse();
|
pathParts.Reverse();
|
||||||
|
var fileNamePart = pathParts[^1];
|
||||||
|
pathParts.Remove(fileNamePart);
|
||||||
|
|
||||||
return FileUtility.GetValidFilename(Path.Join(pathParts.ToArray()), replacements, returnFirstExisting);
|
LongPath directory = Path.Join(pathParts.Select(p => replaceFileName(p, paramReplacements, LongPath.MaxFilenameLength)).ToArray());
|
||||||
|
|
||||||
|
//If file already exists, GetValidFilename will append " (n)" to the filename.
|
||||||
|
//This could cause the filename length to exceed MaxFilenameLength, so reduce
|
||||||
|
//allowable filename length by 5 chars, allowing for up to 99 duplicates.
|
||||||
|
return FileUtility.GetValidFilename(Path.Join(directory, replaceFileName(fileNamePart, paramReplacements, LongPath.MaxFilenameLength - 5)), replacements, returnFirstExisting);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string replaceFileName(string filename, Dictionary<string,string> paramReplacements)
|
private string replaceFileName(string filename, Dictionary<string,string> paramReplacements, int maxFilenameLength)
|
||||||
{
|
{
|
||||||
List<StringBuilder> filenameParts = new();
|
List<StringBuilder> filenameParts = new();
|
||||||
//Build the filename in parts, replacing replacement parameters with
|
//Build the filename in parts, replacing replacement parameters with
|
||||||
@ -82,7 +88,7 @@ namespace FileManager
|
|||||||
|
|
||||||
//Remove 1 character from the end of the longest filename part until
|
//Remove 1 character from the end of the longest filename part until
|
||||||
//the total filename is less than max filename length
|
//the total filename is less than max filename length
|
||||||
while (filenameParts.Sum(p => p.Length) > LongPath.MaxFilenameLength)
|
while (filenameParts.Sum(p => p.Length) > maxFilenameLength)
|
||||||
{
|
{
|
||||||
int maxLength = filenameParts.Max(p => p.Length);
|
int maxLength = filenameParts.Max(p => p.Length);
|
||||||
var maxEntry = filenameParts.First(p => p.Length == maxLength);
|
var maxEntry = filenameParts.First(p => p.Length == maxLength);
|
||||||
|
|||||||
@ -136,19 +136,21 @@ namespace FileManager
|
|||||||
{
|
{
|
||||||
if (toReplace == Replacement.QUOTE_MARK)
|
if (toReplace == Replacement.QUOTE_MARK)
|
||||||
{
|
{
|
||||||
if (preceding == default ||
|
if (
|
||||||
(preceding != default
|
preceding == default ||
|
||||||
&& !char.IsLetter(preceding)
|
(
|
||||||
&& !char.IsNumber(preceding)
|
!char.IsLetter(preceding) &&
|
||||||
&& (char.IsLetter(succeding) || char.IsNumber(succeding))
|
!char.IsNumber(preceding) &&
|
||||||
|
(char.IsLetter(succeding) || char.IsNumber(succeding))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return OpenQuote;
|
return OpenQuote;
|
||||||
else if (succeding == default ||
|
else if (
|
||||||
(succeding != default
|
succeding == default ||
|
||||||
&& !char.IsLetter(succeding)
|
(
|
||||||
&& !char.IsNumber(succeding)
|
!char.IsLetter(succeding) &&
|
||||||
&& (char.IsLetter(preceding) || char.IsNumber(preceding))
|
!char.IsNumber(succeding) &&
|
||||||
|
(char.IsLetter(preceding) || char.IsNumber(preceding))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return CloseQuote;
|
return CloseQuote;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user