You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中如何获取共享服务器文件的作者名称?

解决共享服务器文件作者/最后更新用户获取问题

问题原因

你当前使用的File.GetAccessControl获取的是文件的安全权限所有者,这个值并非总是文件的创建者或最后更新用户:

  • 在共享场景下,如果文件被服务器进程(如IIS、文件服务)修改过,所有者可能会变为服务器的计算机账户或系统账户
  • 该API仅返回NTFS权限体系中的所有者,而非文件属性里记录的创建/修改用户

解决方案

方案1:读取文件系统的创建/修改用户(通过WMI)

通过WMI查询Win32_File类,可以获取文件的创建者和最后修改者信息,适合普通文件:

using System.Management;

string filePath = @"\\server\share\folder\file.txt"; // 共享服务器的UNC路径
string query = $"SELECT * FROM Win32_File WHERE Name = '{filePath.Replace("\\", "\\\\")}'";

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
    foreach (ManagementObject file in searcher.Get())
    {
        Console.WriteLine("创建者: " + file["CreatedBy"]);
        Console.WriteLine("最后修改者: " + file["LastModifiedBy"]);
    }
}

方案2:读取文件扩展属性(适用于Office文档等带元数据的文件)

对于Office文档、图片等带有元数据的文件,可以直接读取其扩展属性中的"Author"字段:

using System.IO;
using Shell32; // 需要引用Shell32.dll

string filePath = @"\\server\share\folder\document.docx";
FileInfo fileInfo = new FileInfo(filePath);

Shell32.Shell shell = new Shell32.Shell();
Shell32.Folder folder = shell.NameSpace(fileInfo.DirectoryName);
Shell32.FolderItem item = folder.ParseName(fileInfo.Name);

// 索引10对应Author属性,不同系统可能有差异,可自行调整
string author = folder.GetDetailsOf(item, 10);
Console.WriteLine("文件作者: " + author);

方案3:修正权限所有者的读取逻辑(针对确实需要所有者的场景)

如果你确认需要的是NTFS权限所有者,需确保:

  • 使用共享服务器的UNC路径(而非本地路径)
  • 当前运行代码的账户有足够权限读取远程文件的安全设置
  • 若文件所有者是域用户,需确保本地能正确解析SID对应的账户
string filePath = @"\\server\share\folder\file.txt";
var fs = File.GetAccessControl(filePath);
var sid = fs.GetOwner(typeof(System.Security.Principal.SecurityIdentifier));
var ntAccount = sid.Translate(typeof(System.Security.Principal.NTAccount));
Console.WriteLine("权限所有者: " + ntAccount.Value);

注意事项

  • 共享服务器路径必须使用UNC格式(\\服务器名\共享名\文件路径),不能用本地盘符映射
  • 运行代码的账户需要有远程文件的读取权限,包括读取安全属性和元数据的权限
  • 不同类型文件的元数据存储位置不同,普通文本文件可能没有"Author"扩展属性,需依赖WMI或安全所有者信息

内容的提问来源于stack exchange,提问作者iftekharus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:15:01