检查谁在网络驱动器上打开了文件

时间:2019-03-26 16:05:22

标签: vb.net

我正在寻找一些代码来告诉我打开了Excel(.xls)文件的用户的用户名。当前,如果文件以只读方式打开,则代码将抛出msgbox,但我也希望它告诉我打开它的人。手动打开时,它会给出名称,作为“锁定编辑”错误消息。这是可能添加的功能吗?

我研究了许多网站,但没有找到一个合适的网站,或者根本没有答案。

我还研究了读取已创建的锁定文件,但仍然无法使其正常工作。

xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass
xlWorkBook = xlApp.Workbooks.Open("\\********", IO.FileAccess.Write)
If xlWorkBook.ReadOnly = True Then
    xlWorkBook.Close(SaveChanges:=False)
    xlApp.Quit()
    releaseObject(xlApp)
    releaseObject(xlWorkBook)
    MsgBox("Workbook Open")
Else
    xlApp.Visible = True
End If

msgbox在哪里,我希望它显示打开它的用户名。

1 个答案:

答案 0 :(得分:1)

Excel在与文件相同的目录中创建一个隐藏文件,文件名以“〜$”开头。该文件的所有者应该是打开Excel文档的帐户(由贡献者Philip Hanebeck在Find out who has Excel file locked for editing中指出)。

将两者放在一起:

Dim excelFile = "C:\temp\mydoc.xlsx"
Dim lockFile = Path.Combine(Path.GetDirectoryName(excelFile), "~$" & Path.GetFileName(excelFile))
Dim fileOwner = File.GetAccessControl(lockFile).GetOwner(GetType(Security.Principal.NTAccount)).ToString()
MsgBox(fileOwner)

我只能在我的计算机上进行测试:您将需要更严格地检查它并进行错误处理。

注意:在我之前链接的文章中,它提到此方法可能不适用于.xls文件,但没有说明是否正在使用早期版本的Excel。而且在文件路径以“ \\”开头而不是在映射驱动器上的地方可能不起作用。


其他材料:Find out File Owner/Creator in C#