相关疑难解决方法(0)

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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

问题是在这种情况下新的"bar.txt"不会从"C:\ foo"目录继承权限.然而,如果我直接在"C:\ foo"中通过explorer/notepad等创建文件,则没有问题,所以我相信权限在"C:\ foo"上正确设置.

更新

找到移动文件夹时 …

c# file-permissions .net-4.0 windows-7

22
推荐指数
1
解决办法
9419
查看次数

C# - Windows ACL - 应用继承的权限

我一直遇到以编程方式为文件夹/注册表项分配权限的问题.我已设法使用以下代码分配继承权限:

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow);

DirectorySecurity security = new DirectorySecurity(); 
security.SetAccessRule(rule);

Directory.CreateDirectory(dir);
Directory.SetAccessControl(dir, security);
Run Code Online (Sandbox Code Playgroud)

这正确地设置了我作为管理员创建的所有子文件夹的文件权限.但是,它不会设置dir文件夹本身的权限.我已经玩了很多关于遗产和传播的排列,但没有任何快乐.

例如,我有:

dir = %programfiles%\Test
Run Code Online (Sandbox Code Playgroud)

如果我在test(%programfiles%\Test\SubFolder)中创建了一个文件夹,我为我的用户分配了完整的权限,但我没有完全权限%programfiles%\Test.这真的很烦人,因为我想给我的用户完全权限,以便对Test目录做任何事情.

我在注册表权限方面遇到了类似的问题,但我相信如果我能解决一个问题,我可以解决这两个悬而未决的问题.

有谁知道如何解决这个问题?

关心
Tris

c# windows permissions acl

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

.net-4.0 ×1

acl ×1

file-permissions ×1

permissions ×1

windows ×1

windows-7 ×1