我需要在覆盖现有文件后使用vb.net以编程方式打开文本文件。但是,如果文件已打开,则仍会显示该文件的旧版本 如果当前在默认文本查看应用程序中打开了.txt文件,如何关闭它?
我不能只使用:
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("notepad")
For Each p As Process In pProcess
p.Kill()
Next
因为这会杀死在记事本中打开的每个文件。我也不想将记事本硬编码为应用程序,因为这可能不是在客户端计算机上打开.txt文件的默认文件。
答案 0 :(得分:1)
阅读评论后,我假设您要杀死已打开给定文本文件的notepad.exe进程。
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("notepad")
For Each p As Process In pProcess
If p.MainWindowTitle.Contains(filename) Then
p.Kill()
End If
Next
此代码可能适用于您
答案 1 :(得分:0)
你所追求的将无法真正发挥作用。
这是因为您在文本文件之后,默认设置为在记事本中打开。并且,记事本不保留文件的句柄。在记事本中打开文件时,文件的整个内容将作为文本加载,文件句柄将关闭。 (尝试在记事本中打开文件,然后将其删除。)
但是,如果您使用的是二进制文件(例如Word),那么应用程序将使用临时文件,因此您可以使用标记FileShare.None
System.IO.File.Open(sFile, FileMode.Open, FileAccess.Read, FileShare.None)
在try-catch
中使用此功能确认文件是否正在使用中。