2008-10-30 6 views
4

Existe-t-il un moyen relativement simple dans nant, sans écrire de tâche personnalisée, d'obtenir le nom du dossier le plus récent dans un répertoire donné? La récursivité n'est pas nécessaire. J'ai essayé de le faire avec directory :: get-creation-time et une boucle foreach et si les déclarations, yada yada. C'est trop complexe et je suis sur le point de créer une tâche personnalisée à la place. Cependant, je soupçonne qu'il existe une façon plus simple de le faire via les fonctionnalités nant existantes.Nant - Obtenir le dossier le plus récent

Répondre

6

Je crois que vous avez raison de dire que cela dans un pur nant la mode pourrait poser d'être désordonné, en particulier la façon dont les propriétés fonctionnent dans nant. Si vous ne voulez pas écrire une tâche personnalisée, vous pouvez toujours utiliser le script task. Par exemple:

<?xml version="1.0"?> 
<project name="testing" basedir="."> 

    <script language="C#" prefix="test" > 
     <code> 
      <![CDATA[ 
      [Function("find-newest-dir")] 
      public static string FindNewestDir(string startDir) { 
       string theNewestDir = string.Empty; 
       DateTime theCreateTime = new DateTime(); 
       DateTime theLastCreateTime = new DateTime(); 
       string[] theDirs = Directory.GetDirectories(startDir); 
       for (int theCurrentIdx = 0; theCurrentIdx < theDirs.Length; ++theCurrentIdx) 
       { 
        if (theCurrentIdx != 0) 
        { 
         DateTime theCurrentDirCreateTime = Directory.GetCreationTime(theDirs[ theCurrentIdx ]); 
         if (theCurrentDirCreateTime >= theCreateTime) 
         { 
          theNewestDir = theDirs[ theCurrentIdx ]; 
          theCreateTime = theCurrentDirCreateTime; 
         } 
        } 
        else 
        { 
         theNewestDir = theDirs[ theCurrentIdx ]; 
         theCreateTime = Directory.GetCreationTime(theDirs[ theCurrentIdx ]); 
        } 
       } 
       return theNewestDir; 
      } 
      ]]> 
     </code> 
    </script> 

    <property name="dir" value="" overwrite="false"/> 
    <echo message="The newest directory is: ${test::find-newest-dir(dir)}"/> 

</project> 

Avec ceci, on devrait pouvoir appeler la fonction pour obtenir le nouveau répertoire. L'implémentation de la fonction réelle pourrait être changée pour être quelque chose (optimisé un peu plus ou peu importe), mais j'ai inclus un rapide pour référence sur la façon d'utiliser la tâche de script . Il produit une sortie comme celle-ci:

 
nant -D:dir=c:\ 

NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006) 
Copyright (C) 2001-2006 Gerry Shaw 
http://nant.sourceforge.net 

Buildfile: file:///C:/tmp/NAnt.build 
Target framework: Microsoft .NET Framework 2.0 

    [script] Scanning assembly "jdrgmbuy" for extensions. 
    [echo] The newest directory is: C:\tmp 

BUILD SUCCEEDED 

Total time: 0.3 seconds. 
Questions connexes