Я думаю, что вы должны сделать что-то вдоль линий, имеющих словарь имен файлов, например:
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");
В этом случае, возможно, потребуется разобрать расширение или рефакторинг или что-то вроде что.
Если вы не имеете контроля над именами файлов в каталоге, то вы можете рассчитывать вхождений вручную:
string fileName = "FooBar";
string[] fileNames = Directory.GetFiles(theDirectory, fileName + "*.xml");
fileName += "(" + (fileNames.Count + 1).ToString() + ")";
SaveFile(fileName + ".xml");
EDIT: Как было отмечено в комментариях, это быстрое и грязное решение с большой ошибкой.
Вот медленнее (я полагаю,), но более надежное решение:
string fileName = "FooBar", directory = @"C:\Output";
int no = 0;
while (++no > 0 && File.Exists(Path.Combine(directory, fileName + "(" + no.ToString() + ").xml")));
+1 Beat me to it – Nifle
Вы делаете повторные вызовы в файловую систему, получение файлов, как было предложено человеком-b, с помощью метода GetFiles может быть быстрее для большого количества файлов. –
Было бы предпочтительнее сказать 'filenameFormat =" FooBar ({0}). Xml ";' в этом случае? – maxwellb