2010-07-27 9 views
1

Je veux créer un algorithme, pour générer un nom pour le nouveau fichier que je veux ajouter au répertoire principal. Tous les fichiers de ce répertoire doivent avoir un nom unique et commencer par "myFile"Increment filename

Que pensez-vous de cet algorithme? Puis-je l'optimiser?

string startFileName="myFile.jpg"; 
string startDirectory="c:\MyPhotosWithSubFoldersAndWithFilesInMainDirectory"; 

bool fileWithThisNameExists = false; 
string tempName = null; 
do 
{ 

    tempName = startFileName +"_"+ counter++ + Path.GetExtension(startFileName); 
    foreach (var file in Directory.GetFiles(startDirectory) 
    { 
     if (Path.GetFileName(tempName) == Path.GetFileName(file)) 
     { 
      fileWithThisNameExists = true; 
     } 
    } 

    if (fileWithThisNameExists) continue; 
    foreach (var directory in Directory.GetDirectories(startDirectory)) 
    { 
     foreach (var file in Directory.GetFiles(directory)) 
     { 
      if (Path.GetFileName(tempName) == Path.GetFileName(file)) 
      { 
       fileWithThisNameExists = true; 
      } 
     } 
    } 
} while (fileWithThisNameExists); 
+0

Pour l'algorithme j'aller avec GUID comme Kangkan suggéré. Mais en regardant votre code, il semble que vous essayez de faire quelque chose que Windows peut faire facilement pour vous. Sur Windows XP et les versions ultérieures de Windows, il est possible de renommer plusieurs fichiers à la fois via Explorer en sélectionnant les fichiers à renommer, puis en appuyant sur la touche F2. Juste pour donner un nouveau nom et appuyez sur Entrée. Tous les fichiers seront renommés et suivis d'un nombre incrémenté entre parenthèses. – KeesDijk

Répondre

2

Si vous n'êtes pas inquiet pour le reste du nom de fichier (à l'exception du départ comme « myFile », vous pouvez simplement créer un GUID et concat au worg « myFile ». Telle est la façon la plus simple . l'autre façon peut-être prendre les tiques Syste et l'ajouter comme une chaîne au mot « myFile ».

2

Si vous construisez vos noms de fichiers afin qu'ils trier par ordre alphabétique

base000001 
base000002 
... 
base000997 

Ensuite, vous pouvez obtenir un répertoire liste et juste aller à la fin de la liste pour trouver le dernier fichier

Attention cependant: que se passe-t-il si deux instances de votre programme s'exécutent en même temps? Il y a une petite fenêtre d'opportunité entre le test du fichier existant et sa création.

Questions connexes