lor*_*ris 6 c# ms-word network-drive file-locking
我想向在Windows(主要是 Windows 7)下运行的用C#编写的软件添加用户友好的文件锁定。我已经通过在相应的进程中保持正在使用的文件“打开”来实现文件锁定部分。我现在仍然想添加的是对当前打开/锁定文件的用户的识别。
正在访问的文件位于映射的网络驱动器上,由不同计算机上的不同用户使用。当文件被锁定并且第二个人尝试打开该文件时,他应该会看到一个对话框,类似于 Microsoft Office 程序中的“文件正在使用”对话框。那里还显示当前正在编辑文件的用户的名称。
我找到了找出打开某个文件的进程的解决方案(使用这个:How do I find out that process islocking a file using .NET?),我还能够读取打开某个文件的用户的名称从中创建了这个过程。但是,当在网络驱动器上打开锁定的文件时,通过这样做生成的用户名始终是我自己的用户名,而不是锁定文件的用户的用户名。
有谁知道如何实现这一目标?我的意思是,Microsoft Office 也可以在我的同一台电脑上以相同的用户权限执行此操作。我只是想知道如何...
干杯!
Office 使用非常简单的技术,我将用 .NET 术语来讨论它。每当 Office 应用程序使用 FileShare.None 打开文档文件时,它还会创建一个隐藏的“锁定文件”,其名称基于文档文件(例如附加“.lockfile”)。并将 Environment.UserDomainName 写入该文件。该文件是使用 FileOptions.DeleteOnClose 和 FileShare.Read 创建的,并且只要文档文件打开就保持打开状态。
当文档再次关闭时,它会关闭锁定文件。使用 FileOptions.DeleteOnClose 确保即使程序崩溃,锁定文件也会消失。
当打开文件产生锁定冲突时,它会查找锁定文件并读取用户名。简单易行,易于自己实现。但当然只有当打开该文件的是一个特定的应用程序时才有效。
归档时间: |
|
查看次数: |
3310 次 |
最近记录: |