-2

我想获取文件所有者信息,但在这一行遇到了一些问题:

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,它包含完整的绝对路径,包括文件名。这给了我同样的问题。

4

3 回答 3

3

该方法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可能是实例方法的方法的文档。

于 2013-04-03T05:04:06.230 回答
-1

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

于 2013-04-03T05:03:49.680 回答
-1

抱歉,我把几个答案放在了错误的位置。我是这个网站的新手(如果你不知道,还有 c#/.net)我相信我在这里找到了一个解决方案Getting / setting file owner in 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 中用于文档所有者名称的变量。感谢每个人在这里帮助我。该解决方案似乎确实有效。快速提问,因为我是新来的。我应该将此作为回复发布吗?我应该接受吗?

于 2013-04-03T23:33:33.913 回答