使用c#获取文件所有者信息

本文关键字:所有者 信息 文件 获取 使用 | 更新日期: 2023-09-27 18:07:20

我想获得文件所有者信息,但在这一行遇到一些麻烦:

const string fileOwner = Delimon.Win32.IO.File.GetAccessControl(fi.Name).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();

具体来说,它不喜欢fi.name。我的错误是

非静态字段、方法或属性'Delimon.Win32.IO.File.GetAccessControl(string)'需要对象引用

这是它所在的较大的代码库:

// check if file exists.  if so dont overwrite...
if(Delimon.Win32.IO.File.Exists(targetPath+fi.Name)) {
    // Console.WriteLine(fileName + " already exists, nothing written");
}
else {
    // Console.WriteLine(fileName + " is new so written to dir");
    string fileOwner=Delimon.Win32.IO.File.GetAccessControl(fi.Name).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
    Delimon.Win32.IO.File.Copy(fileName, destFile, true);
    // convert extension to number
    switch(fileExt) {
        case ".doc":
            fileType=1;
            break;
        case ".xls":
            fileType=2;
            break;
        case ".mdb":
            fileType=3;
            break;
        default:
            fileType=1;
            break;
    }
    // I want tot use fileOwner here in an SQL statement
}

请注意fi.Name只保存文件名。我还有一个名为fileName的变量,它保存完整绝对路径,包括文件名。这给了我同样的问题。

使用c#获取文件所有者信息

方法File.GetAccessControl()作为实例方法而不是静态方法(不像MSDN上的方法)

尝试创建一个类型为Delimon.Win32.IO.File的文件,然后使用创建的实例调用方法:

Delimon.Win32.IO.File file  = new Delimon.Win32.IO.File(...); // Check constructor
FileSecurity fs = myFile.GetAccessControl();

你可能想要检查Delimon.Win32.IO.File.Exists方法的文档,它也可能是一个实例方法。

从错误中,听起来像fi。无法找到Name,因为在调用GetAccessControl时fi为空。在调试器中查看一下。

很抱歉,我把几个答案放在了错误的地方。我是这个网站的新手(和c#/.net如果你不能告诉),我相信我已经找到了一个解决方案,在这里获取/设置c#中的文件所有者。基于此,这就是我如何让它工作的:

using System.Security.AccessControl;
using System.Security.Principal;
var fs = System.IO.File.GetAccessControl(fileName);
var sid = fs.GetOwner(typeof(SecurityIdentifier));
Console.WriteLine(sid);
var ntAccount = sid.Translate(typeof(NTAccount));
Console.WriteLine(ntAccount);

所以ntAccount是一个变量,我将在SQL中使用文档所有者的名称。感谢每一个人的时间帮助我在这里。这个解决方案似乎确实有效。我是新来的,问个小问题。我应该把这个贴出来作为回复吗?我应该接受它吗?