129 votes

En C#, vérifiez que le nom de fichier est *possible* d'être valide (et non qu'il existe).

Existe-t-il une méthode dans l'espace de noms System.IO qui vérifie la validité d'un nom de fichier ?

Par exemple, C:\foo\bar validerait et :"~-* ne serait pas

Ou un peu plus délicat, X:\foo\bar validerait s'il y a un X: sur le système, mais ne le ferait pas autrement.

Je suppose que je pourrais écrire moi-même une telle méthode, mais je suis plus intéressé par une méthode intégrée.

0voto

Austin Salonen Points 28057

Vous obtiendrez ainsi les lecteurs de la machine :

System.IO.DriveInfo.GetDrives()

Ces deux méthodes vous permettront d'obtenir les mauvais caractères à vérifier :

System.IO.Path.GetInvalidFileNameChars();
System.IO.Path.GetInvalidPathChars();

0voto

QgecNick Points 3

Je pense que c'est trop tard pour répondre mais... :) dans le cas d'un chemin avec un nom de volume, vous pourriez écrire quelque chose comme ceci :

    using System;
    using System.Linq;
    using System.IO;
// ...
            var drives = Environment.GetLogicalDrives();
            var invalidChars = Regex.Replace(new string(Path.GetInvalidFileNameChars()), "[\\\\/]", "");
            var drive = drives.FirstOrDefault(d => filePath.StartsWith(d));
            if (drive != null)
            {
                var fileDirPath = filePath.Substring(drive.Length);
                if (0 < fileDirPath.Length)
                {
                    if (fileDirPath.IndexOfAny(invalidChars.ToCharArray()) == -1)
                    {
                        if (Path.Combine(drive, fileDirPath) != drive)
                        {
                            // path correct and we can proceed
                        }
                    }
                }
            }

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