using System; using System.Linq; using System.Collections.Generic; using System.IO; public class Test { public static string AddIncrementFileNameSuffix(string path, IList paths, string separator) { int num = 0; string[] tokens = path.Split(new[] { separator }, StringSplitOptions.None); string strNum = tokens.Last(); int.TryParse(strNum, out num); string fileName = path; string dir = Path.GetDirectoryName(path); string ext = Path.GetExtension(path); var dups = paths.Where(n => n.Equals(fileName, StringComparison.OrdinalIgnoreCase)); while (dups.Any()) { fileName = Path.Combine(dir, tokens.First() + separator + ++num + ext); } paths.Add(fileName); return fileName; } public static void Main() { var SourceFiles = new List() { @"C:\Temp\test_1", @"C:\Temp\test_2" }; var lsNameList = new List() { @"C:\Temp\test_1", @"C:\Temp\test_2", @"C:\Temp\test_3" }; IEnumerable newPaths = SourceFiles .Select(fn => AddIncrementFileNameSuffix(fn, lsNameList,"_")); Console.Write(string.Join(Environment.NewLine, newPaths.ToArray())); } }