При выполнении без прав администратора ответ Роя вызовет исключение (UnauthorizedAccessException) при попытке перезаписи существующих файлов только для чтения или при попытке установить метки времени для скопированных файлов только для чтения.
Следующее решение основано на ответе Роя, но расширяет его для перезаписи файлов, доступных только для чтения, и для изменения временных меток на копируемых файлах, доступных только для чтения, при сохранении атрибута файла только для чтения, все еще при выполнении без прав администратора.
public static void CopyFileExactly(string copyFromPath, string copyToPath)
{
if (File.Exists(copyToPath))
{
var target = new FileInfo(copyToPath);
if (target.IsReadOnly)
target.IsReadOnly = false;
}
var origin = new FileInfo(copyFromPath);
origin.CopyTo(copyToPath, true);
var destination = new FileInfo(copyToPath);
if (destination.IsReadOnly)
{
destination.IsReadOnly = false;
destination.CreationTime = origin.CreationTime;
destination.LastWriteTime = origin.LastWriteTime;
destination.LastAccessTime = origin.LastAccessTime;
destination.IsReadOnly = true;
}
else
{
destination.CreationTime = origin.CreationTime;
destination.LastWriteTime = origin.LastWriteTime;
destination.LastAccessTime = origin.LastAccessTime;
}
}