Je pense que vous auriez à faire quelque chose le long des lignes d'avoir un dictionnaire de noms de fichiers, comme ceci:
Dictionary<string, int> fileNameOccurences = new Dictionary<string, int>();
// ...
string fileName = "FooBar";
if (fileNameOccurences.ContainsKey(fileName)) {
fileNameOccurences[fileName]++;
fileName += "(" + fileNameOccurences[fileName].ToString() + ")";
}
else { fileNameOccurences.Add(fileName, 1); }
SaveFile(fileName + ".xml");
Dans ce cas, vous devrez peut-être analyser l'extension ou refactor ou quelque chose comme cette.
Si vous ne disposez pas de contrôle sur les noms des fichiers dans le répertoire, vous pouvez compter les occurences manuellement:
string fileName = "FooBar";
string[] fileNames = Directory.GetFiles(theDirectory, fileName + "*.xml");
fileName += "(" + (fileNames.Count + 1).ToString() + ")";
SaveFile(fileName + ".xml");
EDIT: Comme cela a été souligné dans les commentaires, c'est une solution rapide et sale avec un bug majeur.
est ici plus lent (je pense), mais une solution plus robuste:
string fileName = "FooBar", directory = @"C:\Output";
int no = 0;
while (++no > 0 && File.Exists(Path.Combine(directory, fileName + "(" + no.ToString() + ").xml")));
+1 Me battre – Nifle
Vous effectuez des appels répétés vers le système de fichiers. Obtenir les fichiers comme suggéré par person-b avec la méthode GetFiles peut être plus rapide pour un grand nombre de fichiers. –
Serait-il plus préférable de dire 'filenameFormat =" FooBar ({0}). Xml ";' dans ce cas? – maxwellb