2 votes

S'assurer qu'un nom de fichier est valide avant la création

J'écris programmatiquement dans un fichier comme ceci :

file = new StreamWriter("C:\\Users\\me\\Desktop\\test\\sub\\" + post.title + ".txt");
file.Write(postString);
file.Close();

Cependant, il arrive que le programme se bloque parce que des caractères illégaux pour un nom de fichier sont présents dans le fichier de données. post.title . Des personnages comme < y " .

Comment puis-je transformer post.title dans un nom de fichier sûr ?

7voto

jglouie Points 5506

L'approche générale consiste à frotter le post.title pour les caractères dans Path.GetInvalidFileNameChars()

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx

Ce fil similaire montre des approches sur la façon de faire des remplacements de cordes à des fins sanitaires : C# Sanitize du nom de fichier

Au cas où ce lien ne fonctionnerait pas, voici une bonne réponse tirée du fil de discussion :

private static string MakeValidFileName( string name )
{
   string invalidChars = Regex.Escape( new string( Path.GetInvalidFileNameChars() ) );
   string invalidReStr = string.Format( @"[{0}]+", invalidChars );
   return Regex.Replace( name, invalidReStr, "_" );
}

0voto

paxdiablo Points 341644

Si le plantage est dû à une exception dans le constructeur de StreamWriter (ce qui semble probable), vous pouvez simplement le placer dans un bloc de capture d'exception.

De cette façon, vous pouvez faire en sorte que votre code poignée la situation plutôt que de tomber dans un tas.

En d'autres termes, quelque chose comme :

try {
    file = new StreamWriter ("C:\\Users\\me\\sub\\" + post.title + ".txt");
catch (Exception e) {  // Should also probably be a more fine-grained exception
    // Do something intelligent, notify user, loop back again 
}

En ce qui concerne le morphage d'un nom de fichier pour le rendre acceptable, la liste des caractères autorisés dans un grand nombre de systèmes de fichiers a été répondue ici .

Fondamentalement, la deuxième table dans cette page Wikipedia ( Comparison of filename limitations ) montre ce qui est autorisé et ce qui ne l'est pas.

Vous pourriez utiliser le remplacement par une expression rationnelle pour vous assurer que tous les caractères non valides sont transformés en quelque chose de valide, comme par exemple _ ou supprimées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X