SharePoint has hard limits on the characters which can be used in the file names. But somehow, I have seen a lot of SharePoint solutions which do not consider that limits, and the error messages about not allowed characters in the file names are popping all the time.
Microsoft has published the whole list of not allowed characters here:
http://support.microsoft.com/kb/905231
Obviously, the only right way before storing the file in the SharePoint library in custom solution is to validate its name before the upload operation. I’ve seen many different ways to validate the name, some better and some worse, but it’s somehow not that well known that there is a SPEncode class in Microsoft.SharePoint.Utilities namespace which can really help us to implement the file name validation which covers all of the cases which SharePoint does not like.
Take a look at the SPEncode class. Hence, take a look at the whole Microsoft.SharePoint.Utilities namepace, there are some cool things there 🙂
For now a nice validation method based on it:
/// <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); }