SAJAGI: Vynucení přejmenování adresáře je jednoduché: místo "X" přejmenovávat "X\". Se soubory je to horší: Jediný trik, co mě napadl, je zneužít ReplaceFile:
if (Directory.Exists(oldName))
{
Console.WriteLine("Processing directory...");
if (!Kernel32.MoveFileEx(oldName + @"\", newName, 0))
{
Console.WriteLine("Failed!");
}
}
else
{
Console.WriteLine("Processing file...");
File.Create(newName).Close();
if (!Kernel32.ReplaceFile(newName, oldName, null, 0, IntPtr.Zero, IntPtr.Zero))
{
Console.WriteLine("Failed!");
File.Delete(newName);
}
}
Nevýhodou je, že se tam nejdříve musí založit ten prázdný soubor pod novým jménem, jehož obsah se následně nahradí (a v případě neúspěchu ex post musí smazat), což pro nejčastější důvody využití přejmenovávání znamená, že to je nepoužitelné, předpokládám. Navíc se tím u toho přejmenovávaného souboru tedy ztratí přesně ty atributy, které ReplaceFile zachovává, což může taky trochu vadit (ale to by asi šlo obejít založením toho nového souboru třeba se stejnými ACL atd.).