检查是否在记事本中打开了文本文件

本文关键字:文本 文件 是否 记事本 检查 | 更新日期: 2023-09-27 18:26:45

如何查找记事本中是否打开了特定的.txt文件?

我尝试过这里提到的解决方案

有没有办法检查文件是否正在使用?

但它们适用于Word和pdf文件,但不适用于在记事本中打开的txt文件。

这是我写的代码。

public bool IsFileOpen(string strFileName)
{
    bool retVal = false;
    try
    {
        if (File.Exists(pstrFileName))
        {
            using (FileStream stream = File.OpenWrite(pstrFileName))
            {
                try
                {    
                }
                catch (IOException)
                {
                    retVal = true;
                }
                finally
                {
                    stream.Close();
                    stream.Dispose();
                }
            }
        }
    }
    catch (IOException)
    { //file is opened at another location 
        retVal = true;
    }
    catch (UnauthorizedAccessException)
    { //Bypass this exception since this is due to the file is being set to read-only 
    }
    return retVal;
} 

我是不是错过了什么。??

我的要求:我有一个类似于VSS的应用程序。当用户签出特定的文件并打开时,并在文件打开时尝试签入该文件。假设应用程序抛出一条警告消息。为此,我使用了上述功能。它适用于word和pdf。

检查是否在记事本中打开了文本文件

展开我的评论。只有当应用程序保持句柄打开时,文件才会被锁定。例如,Word将打开文件,读取流并维护句柄,以便其他应用程序在用户处理该文件时无法删除该文件

Notepad和其他应用程序只需打开文件,读取整个流,然后关闭文件,释放锁定即可。这意味着该文件不再被锁定,可以由另一个应用程序编辑甚至删除,Notepad也不会在意,因为它在内存中有自己的副本。

你可以尝试获取记事本的实例并检查文件是否打开,但这最终不是一个好主意。如果文件没有被锁定,那么你应该可以随意使用它。

这是我刚刚提出的一个破解解决方案,但它应该对您有效。这就利用了System.Diagnostics.

Process[] processes = Process.GetProcessesByName("notepad");
        for (int i = 0; i < processes.Length; i++)
        {
            Console.WriteLine(processes[i].MainWindowTitle);
            if (processes[i].MainWindowTitle.Equals("myFile.txt - Notepad"))
            {
                Console.WriteLine("The file myFile is Open!");
            }
        }
        Console.ReadLine();

希望这能奏效。我的示例查看是否打开了一个标题为"myFile.txt-记事本"的记事本实例。窗口名称总是"filename.extension-Notepad",因此您可以根据需要进行处理。

我想你可以调用System.IO.File.GetLastAccessTime(filePath)。然后你可以每隔一段时间轮询一次文件,当访问时间改变时,你知道文件已经打开,然后你可以触发一个文件已经打开的事件。点击此处查看Jeffs的帖子:在C#中检测文件读取

您也可以使用以下策略来做到这一点:似乎记事本确实对托管文件夹有某种锁定(尝试删除文件夹,您会发现无法删除)。

您可以使用以下代码使用C#,如何计算出哪个进程锁定了一个文件?以检查锁定文件夹的进程列表。其中一个过程就是你的记事本。

你可以将它们按标题与提到的另一个答案进行比较。如果您发出打开文件的命令,您可以保存PID并将其与返回的进程之一进行通信。