2009-09-10 5 views
3

Pourquoi cela ne fonctionnera-t-il pas, la sortie est identique à l'entrée? Je suis déconcerté !!!C#: Supprime les caractères illégaux d'une chaîne de nom de fichier

string name = ";;;'']][[ zion \\\[[[]]]" 
char[] invalidChars = System.IO.Path.GetInvalidPathChars(); 
string invalidString = Regex.Escape(new string(invalidChars)); 

string valid = Regex.Replace(name, "[" + invalidString + "]", ""); 
+0

Vous pouvez avoir posté votre chaîne 'nom' incorrectement ... –

Répondre

6

EDIT:

Je pense qu'il peut juste être un cas de données d'essais imparfaits (avec le changement de fonction que les autres ont suggéré). Essayez ceci:

string name = "tru\\e.jpg"; 
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars(); 
string invalidString = Regex.Escape(new string(invalidChars)); 
string valid = Regex.Replace(name, "[" + invalidString + "]", ""); 
Console.WriteLine(valid); 

Je reçois la sortie "true.jpg". Je suggérerais certainement beaucoup plus d'essai avant d'employer ceci dans la production! :)

+0

merci, données de test non valides. Je me sens si grand! –

4

Qu'entendez-vous par cela ne fera rien? Je courus ce qui suit dans une application console:

string name = ";;;'']][[ zion \\\\[[[]]]"; 
char[] invalidChars = System.IO.Path.GetInvalidPathChars(); 
string invalidString = Regex.Escape(new string(invalidChars)); 

string valid = Regex.Replace(name, "[" + invalidString + "]", ""); 
Console.WriteLine(valid); 

Par la façon dont votre syntaxe était mauvaise, vous aviez des personnages et unescaped vous manque un point-virgule.

Et j'ai obtenu le résultat suivant.

;;;'']][[ zion \\[[[]]] 

Quel est le résultat correct. Peut-être que vous devriez poser une nouvelle question sur ce que vous essayez de faire parce que votre approche actuelle semble indiquer que vous n'avez pas une bonne compréhension de Regex.

Mise à jour: Essayez-vous de vérifier les noms de fichiers? Si oui, vous voulez probablement utiliser:

System.IO.Path.GetInvalidFileNameChars(); 

Mise à jour: Voici une liste des caractères non valides qui vient de cette méthode GetInvalidPathChars()

RealInvalidPathChars = new char[] { 
     '"', '<', '>', '|', '\0', '\x0001', '\x0002', '\x0003', '\x0004', '\x0005', '\x0006', '\a', '\b', '\t', '\n', '\v', 
     '\f', '\r', '\x000e', '\x000f', '\x0010', '\x0011', '\x0012', '\x0013', '\x0014', '\x0015', '\x0016', '\x0017', '\x0018', '\x0019', '\x001a', '\x001b', 
     '\x001c', '\x001d', '\x001e', '\x001f' 
    }; 

Donc, fondamentalement, les éléments suivants sont des caractères de chemin non valide pourrait inclure Caractères ASCII/Unicode 1 à 31, ainsi que quote ("), inférieur à (<), supérieur à (>), pipe (|), retour arrière (\ b), null (\ 0) et tabulation (\ t)

Aucun d'entre eux ne semble se produire dans votre chaîne d'origine.

+0

chaîne 'valide' est identique à 'nom' –

+0

Il essaie de faire une variante de ceci: http://powershell.com/cs /blogs/tips/archive/2009/06/15/checking-paths-for-invalid-path-characters.aspx – TrueWill

+0

J'essaie de me débarrasser de tous les caractères illégaux. –

4

Get caractères de fichier non valide en utilisant,

char[] invalidChars=System.IO.Path.GetInvalidFileNameChars(); 
+0

Il essaie de copier http://powershell.com/cs/blogs/tips/archive/2009/ 06/15/check-paths-for-invalid-path-characters.aspx qui ne l'utilise pas. –

Questions connexes