c# – 获取在网络驱动器上打开文件的用户的用户名 – Microsoft Office Style

我想将用户友好的文件锁定添加到在
Windows下运行的软件(主要是Windows 7),用C#编写.

我已经通过在相应的进程中保持文件“打开”来实现文件锁定部分.我现在还要添加的是识别当前打开/锁定文件的用户.

正在访问的文件位于映射的网络驱动器上,由不同计算机上的不同用户使用.
当文件被锁定并且第二个人试图打开文件时,他应该面对一个对话框,类似于Microsoft Office程序中的“正在使用的文件”-dialog.在那里,还显示当前正在编辑文件的用户的名称.

我找到了解决方案来查找具有某个文件打开的进程(使用此文件:How do I find out which process is locking a file using .NET?)
我还能够读取创建此过程的用户的名称.但是,在网络驱动器上打开锁定文件时,通过这样做的方式生成的用户名始终是我自己的用户名,而不是用户锁定文件的用户名.

有谁知道如何实现这一目标?我的意思是Microsoft Office可以在具有相同用户权限的同一台PC上以某种方式执行此操作.我只是想知道…

干杯!

最佳答案 Office使用一种非常简单的技术,我将用.NET术语来讨论它.每当Office应用程序使用FileShare.None打开文档文件时,它还会创建一个隐藏的“锁定文件”,其名称基于文档文件(例如,附加“.lockfile”).并将Environment.UserDomainName写入该文件.该文件是使用FileOptions.DeleteOnClose和FileShare.Read创建的,只要文档文件打开就会保持打开状态.

它会在文档再次关闭时关闭锁定文件.使用FileOptions.DeleteOnClose可确保即使程序发生爆炸,锁文件也会消失.

打开文件时会产生锁定违规,它会查找锁定文件并读取用户名.轻松自在,简单易用.但当然只有当它是一个打开文件的特定应用程序时才能工作.

点赞