File.Move не наследует разрешения от целевого каталога?

Если что-то пошло не так, создавая файл, я писал во временный файл, а затем переехал в пункт назначения. Что-то вроде:

var destination = @"C:\foo\bar.txt"; var tempFile = Path.GetTempFileName(); using (var stream = File.OpenWrite(tempFile)) { // write to file here here } string backupFile = null; try { var dir = Path.GetDirectoryName(destination); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); Util.SetPermissions(dir); } if (File.Exists(destination)) { backupFile = Path.Combine(Path.GetTempPath(), new Guid().ToString()); File.Move(destination, backupFile); } File.Move(tempFile, destination); if (backupFile != null) { File.Delete(backupFile); } } catch(IOException) { if(backupFile != null && !File.Exists(destination) && File.Exists(backupFile)) { File.Move(backupFile, destination); } } 

Проблема в том, что новый «bar.txt» в этом случае не наследует разрешения из каталога «C: \ foo». Тем не менее, если я создаю файл через explorer / notepad и т. Д. Непосредственно в «C: \ foo», проблем нет, поэтому я считаю, что разрешения правильно установлены на «C: \ foo».

Обновить

Найдено Унаследованные разрешения не обновляются автоматически при перемещении папок , возможно, это относится и к файлам. Теперь вы ищете способ принудительного обновления прав доступа к файлам. Есть ли лучший способ сделать это?

Я нашел то, что мне было нужно:

 var fs = File.GetAccessControl(destination); fs.SetAccessRuleProtection(false, false); File.SetAccessControl(destination, fs); 

Это приведет к смене разрешения файла для наследования.