Correcting duplicate names in array
A quick and easy way would be to use a HashSet&lt;T&gt; and check the return of the Add() method. If it returns false you will know that you need to create a new filename. So let's start by extracting the creation  of the filename like so  

private string CreateFileName(string original, ref int counter)
{
    counter += 1;
    string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(original) + "(" + counter + ")";
    string fileExtension = Path.GetExtension(original);
    return fileNameWithoutExtension + fileExtension;
}  


Next we iterate over all of the items of the array and try to add it to the HashSet&lt;T&gt;. If we can't add it, we create the new filename and try to add it again until we succeed.

private string[] ChangingDuplicateNames(string[] files)
{
    var hashSet = new HashSet&lt;string&gt;(StringComparer.OrdinalIgnoreCase);
    foreach (var file in files)
    {
        var currentFile = file;
        int counter = 0;
        while (!hashSet.Add(currentFile))
        {
            currentFile = CreateFileName(file, ref counter);
        }
    }

    return hashSet.ToArray();
}