2010-05-08 4 views
0

De nombreux exemples C# montrent comment manipuler des fichiers et des répertoires, mais ils utilisent inévitablement des chemins de dossier qui ne contiennent aucun espace. Dans le monde réel, j'ai besoin de pouvoir traiter des fichiers dans des dossiers avec des noms contenant des espaces. J'ai écrit le code ci-dessous qui montre comment j'ai résolu le problème. Cependant, il ne semble pas très élégant et je me demande si quelqu'un a un meilleur moyen.Traitement de fichiers avec C# dans des dossiers dont les noms contiennent des espaces

class Program 
{ 
    static void Main(string[] args) 
    { 

     var dirPath = @args[0] + "\\"; 

     string[] myFiles = Directory.GetFiles(dirPath, "*txt"); 
     foreach (var oldFile in myFiles) 
     { 
      string newFile = dirPath + "New " + Path.GetFileName(oldFile); 
      File.Move(oldFile, newFile); 
     } 
     Console.ReadKey(); 
    } 
} 

Cordialement, Nigel Ainscoe

+3

Utilisez Path.Combine() au lieu de traiter antislashs vous ... –

+0

Suis-je manque quelque chose? Toutes les classes 'System.IO' gèrent des fichiers et des répertoires avec des espaces. Techniquement, même DOS l'a fait, en termes de système de fichiers, c'est juste que certains outils de ligne de commande n'ont pas correctement analysé les espaces. – Aaronaught

+0

Path.Combine est vital - vous obtiendrez une erreur si vous essayez de faire les barres obliques vous-même et ne réaliserez pas jusqu'à ce que vous essayez un fichier avec des espaces – stuartdotnet

Répondre

1
string newFile = Path.Combine(args[0], "New " + Path.GetFileName(oldFile)); 

ou:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Directory 
      .GetFiles(args[0], "*txt") 
      .ToList() 
      .ForEach(oldFile => { 
       var newFile = Path.Combine(
        Path.GetDirectoryName(oldFile), 
        "New " + Path.GetFileName(oldFile) 
       ); 
       File.Move(oldFile, newFile); 
      }); 
     Console.ReadKey(); 
    } 
} 
+0

Cela ressemble beaucoup plus à ce que j'étais après Darin. Je vous remercie. –

+0

Maintenant, j'ai juste besoin de vérifier que le chemin passé par l'utilisateur ne contient pas de barre oblique inverse, sinon il se bloque –

Questions connexes