private void OnFilterListClicked(object sender, EventArgs e)
        {
            if (e is MouseEventArgs mouse && mouse.Button == MouseButtons.Left && filterList.SelectedItems.Count > 0)
            {
                ContextMenuStrip cms          = sender as ContextMenuStrip;
                object           selectedItem = filterList.SelectedItem;

                filterList.Items.Remove(selectedItem);

                var toolStripItem = cms?.GetItemAt(mouse.Location);
                if (toolStripItem != null)
                {
                    if (toolStripItem.Text == "Open in file explorer")
                    {
                        try {
                            System.Diagnostics.Process.Start("explorer.exe", selectedItem.ToString());
                        } catch (Exception ex) {
                            RedundantFileRemover.LogException(ex.Message + " " + ex.StackTrace);
                            MessageBox.Show("File not found", "The file to open does not exist: " + ex.Message, MessageBoxButtons.OK);
                        }
                    }
                    else if (toolStripItem.Text == "Remove from list")
                    {
                        FileDataReader.ProgramSettings.SettingsWindow.IgnoredDirectories.Remove(selectedItem.ToString());
                    }
                }

                if (filterList.Items.Count == 0)
                {
                    removeFilters.Enabled = false;
                }

                if (cms != null)
                {
                    cms.Close();
                }

                filterList.SelectedItems.Clear();
            }
        }
        private static void CollectAccessibleFiles(DirectoryInfo directoryInfo, string sp, bool isDir)
        {
            try {
                var directories = directoryInfo.EnumerateDirectories()
                                  .Where(d => !d.FullName.Replace(" ", "").Contains("RedundantFileRemover"))
                                  .Where(d => IsNotSpecialFolder(d.Name))
                                  .Where(d => IsFileNotHidden(d)).ToArray();

                if (isDir)
                {
                    for (int i = 0; i < directories.Length; i++)
                    {
                        if (directories[i].Exists)
                        {
                            try {
                                var dirInfo = directories.ElementAt(i);
                                accessibleFiles.Add(dirInfo);

                                if (FileDataReader.ProgramSettings.SettingsWindow.SearchInSubDirectories)
                                {
                                    CollectAccessibleFiles(dirInfo, sp, isDir);
                                }
                            } catch (Exception ex) {
                                RedundantFileRemover.LogException(ex.Message + " " + ex.StackTrace);
                            }
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < directories.Length; i++)
                    {
                        try {
                            if (!directories.ElementAt(i).Exists)
                            {
                                continue;
                            }

                            foreach (FileInfo fileInfo in directories[i].GetFiles('*' + sp))
                            {
                                try {
                                    if (fileInfo.Exists && IsFileNotHidden(fileInfo))
                                    {
                                        accessibleFiles.Add(fileInfo);
                                    }
                                } catch (Exception exe) {
                                    RedundantFileRemover.LogException(exe.Message + " " + exe.StackTrace);
                                }
                            }

                            if (FileDataReader.ProgramSettings.SettingsWindow.SearchInSubDirectories)
                            {
                                CollectAccessibleFiles(directories[i], sp, isDir);
                            }
                        } catch (Exception ex) {
                            RedundantFileRemover.LogException(ex.Message + " " + ex.StackTrace);
                        }
                    }
                }
            } catch (Exception ex) {
                RedundantFileRemover.LogException(ex.StackTrace + " " + ex.Message);
            }
        }