Example #1
0
        public static string StripStringForFilename(string input, ValidityMode vmode = ValidityMode.AllowWhitelist, char?repl = null)
        {
            var output = new StringBuilder(input.Length);

            foreach (var c in input)
            {
                if (IsValidChar(c, vmode))
                {
                    output.Append(c);
                }
                else
                {
                    if (repl != null)
                    {
                        output.Append(repl);
                    }
                }
            }

            var fileName = output.ToString();

            if (RESERVED_FILENAMES.Any(r => string.Equals(r, fileName, StringComparison.CurrentCultureIgnoreCase)))
            {
                fileName = "_" + fileName;
            }
            if (RESERVED_FILENAMES.Any(r => fileName.ToLower().StartsWith(r.ToLower() + ".")))
            {
                fileName = "_" + fileName;
            }

            return(fileName);
        }
Example #2
0
 private static bool IsValidChar(char chr, ValidityMode vmode)
 {
     if (vmode == ValidityMode.AllowAllCharacters)
     {
         return(!Path.GetInvalidFileNameChars().Contains(chr));
     }
     else if (vmode == ValidityMode.AllowAllLetters)
     {
         return(ALLOWED_CHARACTER.Contains(chr) ||
                char.GetUnicodeCategory(chr) == UnicodeCategory.LetterNumber ||
                char.GetUnicodeCategory(chr) == UnicodeCategory.OtherLetter ||
                char.GetUnicodeCategory(chr) == UnicodeCategory.DecimalDigitNumber ||
                char.GetUnicodeCategory(chr) == UnicodeCategory.UppercaseLetter ||
                char.GetUnicodeCategory(chr) == UnicodeCategory.LowercaseLetter);
     }
     else
     {
         return(ALLOWED_CHARACTER.Contains(chr));
     }
 }
Example #3
0
        public static string ConvertStringForFilename(string input, ValidityMode vmode = ValidityMode.AllowWhitelist)
        {
            var output = new StringBuilder(input.Length);

            foreach (var c in input)
            {
                if (c == CONVERT_ESCAPE_CHARACTER)
                {
                    output.Append(CONVERT_ESCAPE_CHARACTER);
                    output.Append($"{(int) c:X4}");
                }
                else if (IsValidChar(c, vmode))
                {
                    output.Append(c);
                }
                else
                {
                    output.Append(CONVERT_ESCAPE_CHARACTER);
                    output.Append($"{(int) c:X4}");
                }
            }

            var fileName = output.ToString();

            if (fileName.EndsWith("."))
            {
                fileName = fileName.Substring(0, fileName.Length - 1) + CONVERT_ESCAPE_CHARACTER + $"{(int) '.':X4}";
            }

            if (RESERVED_FILENAMES.Any(r => string.Equals(r, fileName, StringComparison.CurrentCultureIgnoreCase)))
            {
                fileName = CONVERT_ESCAPE_CHARACTER + $"{(int) fileName[0]:X4}" + fileName.Substring(1);
            }

            return(fileName);
        }