我想获取文件所有者信息,但在使用此行时遇到了一些问题:
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
的变量,它包含完整绝对路径,包括文件名。这给了我同样的问题。
答案 0 :(得分: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
方法。
答案 1 :(得分:-1)
从错误中,听起来像无法找到fi.Name,因为在调用GetAccessControl时fi为null。在调试器中查看它。
答案 2 :(得分:-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中用于文档所有者名称。感谢每一次帮助我。这个解决方案似乎确实有效。快点问题,因为我是新来的。我应该将此作为回复发布,我应该接受吗?