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可确保即使程序发生爆炸,锁文件也会消失.
打开文件时会产生锁定违规,它会查找锁定文件并读取用户名.轻松自在,简单易用.但当然只有当它是一个打开文件的特定应用程序时才能工作.
标签:c,ms-word,file-locking,network-drive 来源: https://codeday.me/bug/20190702/1357017.html