none
Функция нормализации имени документа RRS feed

  • Вопрос

  • Ситуация - когда на UI юзер создает документ, то он при недопустимом имени получает от шарика сообщение:

    Имя файла или папки "., 5555, 12.10.2014" содержит недопустимые знаки. Используйте другое имя. Допустимые имена файлов и папок не могут начинаться или завершаться точкой, содержать несколько точек подряд, а также содержать следующие знаки: ~ " # % & * : < > ? / \ { | }.

    Мне надо создавать документы из кода таймер-джоба и иногда у создаваемого документа может получаться такое имя. Об этой проблеме я хочу знать до того, как вызовется метод SPListItem.Update(). Вопрос - есть ли в АПИ шарика функция-валидатор строки названия элемента? Или как будет выглядеть регекс для замены всех символов, вызывающих такое сообщение, на тире?

    10 октября 2014 г. 20:50

Ответы

  • Добрый день,

    вот готовый код, добавьте namespace Microsoft.SharePoint.Utilities -

    /// <summary>
    /// Validates a file name before upload to the sharepoint library.
    /// </summary>
    /// <param name="fileName">Original file name</param>
    /// <returns>Clean file name</returns>
    private string cleanFileName(string fileName)
    {
        string ext = Path.GetExtension(fileName);
        string name = Path.GetFileNameWithoutExtension(fileName);
     
         //
         //first remove double fullstops (..)
         while (name.Contains(".."))
         {
             name = name.Replace("..", "__");
         }
     
         //
         //name only is not allowed to end with fullstop (.)
         if (name.EndsWith("."))
         {
             name = name.Substring(0, name.Length - 1) + "_";
         }
     
         //
         //now use "SPEncode.IsLegalCharInUrl()" to remove characters which sharepoint does not like
         char[] filenameChars = name.ToCharArray();
         foreach (char c in filenameChars)
         {
             if (!SPEncode.IsLegalCharInUrl(c)) name = name.Replace(c.ToString(), "");
         }
     
         //                                        
         //return clean filename
            return string.Format("{0}{1}", name, ext);return string.Format("{0}{1}", name, ext);       
             
    }
    Все проверки есть. API дает функцию проверки на символы в 
    SPEncode.IsLegalCharInUrl


    • Предложено в качестве ответа Maxim Shusharin 12 октября 2014 г. 6:54
    • Изменено Maxim Shusharin 12 октября 2014 г. 6:56
    • Помечено в качестве ответа Senglory 14 октября 2014 г. 13:47
    12 октября 2014 г. 6:54

Все ответы

  • Посмотрите SPEncode.UrlEncode

    http://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.utilities.spencode.urlencode(v=office.15).aspx


    Сазонов Илья http://isazonov.wordpress.com/

    12 октября 2014 г. 6:28
    Модератор
  • Посмотрите SPEncode.UrlEncode

    http://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.utilities.spencode.urlencode(v=office.15).aspx


    Сазонов Илья http://isazonov.wordpress.com/

    Добрый день, это URL encode, не подойдет.

    посмотрите: Path.GetInvalidFileNameChars

    Довольно просто использовать:

    private string CheckName(string name)
            {
                char[] InvalidChars = Path.GetInvalidFileNameChars();
                string tmp = name;
                foreach(var c in InvalidChars)
                {
                    if (tmp.Contains(c))
                    {
                        tmp = tmp.Replace(c, '_');
                    }
                }
                return tmp;
            }

    проверит на недопустимые символы и заменит на нужный вам. Допишите еще проверку на остальные спец символы, лишние пробелы в начале и в конце имени, проверку на точки.

    12 октября 2014 г. 6:49
  • Добрый день,

    вот готовый код, добавьте namespace Microsoft.SharePoint.Utilities -

    /// <summary>
    /// Validates a file name before upload to the sharepoint library.
    /// </summary>
    /// <param name="fileName">Original file name</param>
    /// <returns>Clean file name</returns>
    private string cleanFileName(string fileName)
    {
        string ext = Path.GetExtension(fileName);
        string name = Path.GetFileNameWithoutExtension(fileName);
     
         //
         //first remove double fullstops (..)
         while (name.Contains(".."))
         {
             name = name.Replace("..", "__");
         }
     
         //
         //name only is not allowed to end with fullstop (.)
         if (name.EndsWith("."))
         {
             name = name.Substring(0, name.Length - 1) + "_";
         }
     
         //
         //now use "SPEncode.IsLegalCharInUrl()" to remove characters which sharepoint does not like
         char[] filenameChars = name.ToCharArray();
         foreach (char c in filenameChars)
         {
             if (!SPEncode.IsLegalCharInUrl(c)) name = name.Replace(c.ToString(), "");
         }
     
         //                                        
         //return clean filename
            return string.Format("{0}{1}", name, ext);return string.Format("{0}{1}", name, ext);       
             
    }
    Все проверки есть. API дает функцию проверки на символы в 
    SPEncode.IsLegalCharInUrl


    • Предложено в качестве ответа Maxim Shusharin 12 октября 2014 г. 6:54
    • Изменено Maxim Shusharin 12 октября 2014 г. 6:56
    • Помечено в качестве ответа Senglory 14 октября 2014 г. 13:47
    12 октября 2014 г. 6:54