我需要替换文件的内容,而不需要更改它的权限。我是通过读取文件,删除它并编写一个包含更新内容的新文件来实现的。
我有以下内容:
static void Main()
{
var file = new FileInfo(@"C:\temp\test.txt");
var file1Security = file.GetAccessControl(AccessControlSections.All);
string s;
using (var stream = file.OpenText())
{
s = stream.ReadToEnd();
}
s += "\n" + DateTime.Now;
file.Delete();
using (var stream = file.OpenWrite())
{
using (var writer = new StreamWriter(stream))
{
writer.Write(s);
}
}
file.SetAccessControl(file1Security);
}
但是,这不会将用户的权限复制到新文件。
如何替换文件内容并保留用户的权限?
答案 0 :(得分:3)
根据this documentation,您无法从一个文件中复制FileSecurity
并将其应用于另一个文件。 (显然,他们已经记录了它。我也会尝试过。)
您必须创建一个新的FileSecurity
对象,将访问控制列表从旧对象复制到新对象,然后将新的对象应用于该文件。
void ApplySecurityFromOneFileToAnother(FileInfo source, FileInfo destination)
{
var sourceSecurityDescriptor = source.GetAccessControl().GetSecurityDescriptorBinaryForm();
var targetSecurity = new FileSecurity();
targetSecurity.SetSecurityDescriptorBinaryForm(sourceSecurityDescriptor);
destination.SetAccessControl(targetSecurity);
}
由于你要替换文件,你必须打破它,当然 - 先从旧文件中获取安全性,然后在重写后将其应用到同一个文件中。
答案 1 :(得分:0)
FileSecurity file1Security = file.GetAccessControl(AccessControlSections.All);
file1Security.SetAccessRuleProtection(true, true);
尝试替换" var"将第一行代码复制到此处,并添加下面的行。最后一部分适用访问规则。
答案 2 :(得分:0)
尝试在开头使用DirectoryInfo:
DirectoryInfo dInfo = new DirectoryInfo(@"C:\temp\test.txt");
DirectorySecurity dSecurity = dInfo.GetAccessControl();
并用:
更改最后一行dInfo.SetAccessControl(dSecurity);