C # Supprimer les caractères non valides du nom de fichier
J'ai des données provenant d'un champ de type nvarchar de la base de données SQL server via FE3.5. Cette chaîne est utilisée pour créer un nom de fichier et le besoin de supprimer les caractères non valides et essayé de suivre les options, mais aucun d'entre eux travaille. S'il vous plaît suggérer pourquoi c'est un tel compréhensible mystère? Suis-je en train de faire quelque chose de mal?
Je suis allé, bien que presque toutes les questions sur ce site.. et maintenant l'affichage consolidé de la question de toutes les suggestions et réponses à d'autres questions similaires.
UPD: La Question n'était pas liée..Toutes ces options fonctionnent. Alors les poster à la communauté wiki.
public static string CleanFileName1(string filename)
{
string file = filename;
file = string.Concat(file.Split(System.IO.Path.GetInvalidFileNameChars(), StringSplitOptions.RemoveEmptyEntries));
if (file.Length > 250)
{
file = file.Substring(0, 250);
}
return file;
}
public static string CleanFileName2(string filename)
{
var builder = new StringBuilder();
var invalid = System.IO.Path.GetInvalidFileNameChars();
foreach (var cur in filename)
{
if (!invalid.Contains(cur))
{
builder.Append(cur);
}
}
return builder.ToString();
}
public static string CleanFileName3(string filename)
{
string regexSearch = string.Format("{0}{1}",
new string(System.IO.Path.GetInvalidFileNameChars()),
new string(System.IO.Path.GetInvalidPathChars()));
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
string file = r.Replace(filename, "");
return file;
}
public static string CleanFileName4(string filename)
{
return new String(filename.Except(System.IO.Path.GetInvalidFileNameChars()).ToArray());
}
public static string CleanFileName5(string filename)
{
string file = filename;
foreach (char c in System.IO.Path.GetInvalidFileNameChars())
{
file = file.Replace(c, '_');
}
return file;
}
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
La première méthode que vous avez posté des œuvres OK pour les caractères
Path.GetInvalidFileNameChars()
il est ici à l'œuvre:Je suppose cependant que votre problème est avec un peu de spécifique à la langue des caractères spéciaux. Vous pouvez essayer de résoudre ce problème par l'impression des codes ASCII des caractères de votre chaîne:
et de consultation de la table ASCII: http://www.asciitable.com/
Je nouveau pensez que vous verrez des personnages avec des codes de taille supérieure à 128, et vous devriez exclure ceux de votre chaîne.
Voici une fonction que j'utilise dans une statique de la classe commune:
Essayer cette
filename = Regex.Replace(filename, "[\/?:*""><|]+", "", RegexOptions.Compiled)