gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:24:33 28 4
gpt4 key购买 nike

我想将用户友好的文件锁定添加到在 Windows(主要是 Windows 7)下运行的软件中,该软件是用 C# 编写的。我已经实现了文件锁定部分,通过在相应进程中保持使用中的文件“打开”。我现在仍然想添加的是对当前打开/锁定文件的用户的识别。

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

我找到了找出进程的解决方案,这些进程打开了某个文件(使用了这个: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# - 获取在网络驱动器上打开文件的用户的用户名 - Microsoft Office Style,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805734/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com