File.Move does not inherit permissions from target directory?
Found what I needed was this:
var fs = File.GetAccessControl(destination);
fs.SetAccessRuleProtection(false, false);
File.SetAccessControl(destination, fs);
This resets the file permissions to inherit.
Related videos on Youtube
Joseph Kingry
To achieve great things, two things are needed: a plan, and not quite enough time. - Leonard Berrnstein You see, wire telegraph is a kind of a very, very long cat. You pull his tail in New York and his head is meowing in Los Angeles. Do you understand this? And radio operates exactly the same way: you send signals here, they receive them there. The only difference is that there is no cat.- Albert Einstein #SOreadytohelp
Updated on April 23, 2022Comments
-
Joseph Kingry about 2 years
In case something goes wrong in creating a file, I've been writing to a temporary file and then moving to the destination. Something like:
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); } }
The problem is that the new "bar.txt" in this case does not inherit permissions from the "C:\foo" directory. Yet if I create a file via explorer/notepad etc directly in the "C:\foo" there's no issues, so I believe the permissions are correctly set on "C:\foo".
Update
Found Inherited permissions are not automatically updated when you move folders, maybe it applies to files as well. Now looking for a way to force an update of file permissions. Is there a better way overall of doing this?
-
Neil about 12 yearsDo you have to do this once the file has already been moved? In which case it's no longer atomic - there's a risk someone could try and read the file before the permissions are in place
-
Joseph Kingry about 12 years@Neil yes, this would be after the move and yes it would make it no longer atomic.
-
Jim over 11 years@JosephKingry. Thanks, this helped me out. But, I also wanted to remove any explicit permissions as a result of the Move. Just a few more lines of code. stackoverflow.com/a/12821819/486660
-
Caleb Seadon almost 7 yearsIs this also necessary when copying a file or are the permissions automatically inherited in that case?