2011-05-04 76 views
14

使用C#我如何获得有关谁打开文件的信息? 用户名和机器名就足够了。确定谁使用C#打开文件

万一它很重要我有Windows工作站通过Samba访问Linux文件服务器上的文件。 我需要在工作站上运行的程序中使用这些信息。

回答

4

核心的.NET库没有任何手段来做到这一点。

如果我正确理解你的话,你想从Windows工作站A知道谁在Linux文件共享上打开了文件,并且有些打开文件的用户可能是从其他窗口框创建的,如果是这样的话您需要在Linux端提供服务,您可以查询该服务以将其提供给Windows工作站。

在本地机器上可以实现,但至少您需要互操作到OS API,如NtQueryInformationFileNtQueryObject(均未正式记录)等等。像进程监视器这样的工具会动态地安装设备驱动程序,以实现他们所做的检查级别,并且只会告诉您哪个用户打开哪些本地文件句柄。

+0

您正确理解我的问题。我以为System.IO中可能有这样的动物。我可能正在考虑使用具有WhoHasInfo方法的AutoCAD API,该方法可获取有关.DWG(或相关)文件的信息。它获取用户名,计算机名称,isFileLocked和OpenTime。 – mohnston 2011-05-04 18:39:08

+0

如果远程文件位于通过共享文件夹公开的Windows Server上,该怎么办?在这种情况下是SAMBA,还是在.NET库中实际存在缺陷? – 2012-01-25 23:23:20

+0

为了帮助他人:由于它是一个Linux Samba文件服务器,因此您需要执行“smbstatus”命令,捕获并解析输出。其中包括:用户,机器和文件。你甚至可以用-L选项来请求一个只有锁定文件的列表(我试图在Java中做同样的事情,这是我找到的唯一路径),尽管我会非常喜欢一个适用于Windows的解决方案2008通过Linux的文件服务器没有一个解决方案是显而易见的。 – Quaternion 2014-03-27 23:38:40