Sai Parthiv Ответов: 1

Как исключить массив из поиска в C#


У меня есть массив. Скажем так;

private string[] WhiteList =
     {
        "abcxyz.cs",
        "mouseapi.dll",
        "SensitivtyFix.asi",
        "drake.mp3"
     };


private string[] SuspectedFiles =
        {
            ".cs",
            "d3d9.dll",
            "sqlite3.dll",
            "mod_sa.ini",
            "mod_sa.raw",
            ".cleo",
            ".asi"
        };


Теперь я хочу исключить этот массив из поиска каталога/файла. Как мне этого добиться?

Для этого поиска я использую другой массив под названием SuspectedFiles, из которого я мог бы извлечь нужные файлы, но я не могу исключить файлы из белого списка массива.



Любая помощь была бы очень кстати. Спасибо.

Что я уже пробовал:

Это мой код, который я использовал и не добился успеха. Я мог получить результаты поиска файлов из массива SuspectedFiles, но не мог удалить файлы, содержащиеся в массиве Whitelist, из результатов поиска.

private void VerifySuspectedFiles()
        {
            listBox1.Enabled = true;

            DirectoryInfo DirInf = new DirectoryInfo(GetGtaRegistryPath());
            int GetSize = SuspectedFiles.GetLength(0);

            if (!DirInf.Exists)
            {
                MessageBox.Show("This directory does not exist!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                return;
            }

            if (GetSize == 0)
            {
                return;
            }

            for (int i = 0; i < GetSize; ++i)
            {
                foreach (var File in DirInf.GetFiles("*", SearchOption.AllDirectories))
                {
                    if (File.FullName.Contains(SuspectedFiles[i]) && !File.FullName.Contains(WhiteList[i]))

                    {
                        listBox1.Items.Add("File: " + File.FullName);
                    }
                }
            }
        }

1 Ответов

Рейтинг:
11

OriginalGriff

Для начала вы, вероятно, захотите немного больше подумать о том, что вы проверяете: тест Contains для подозрительных файлов будет работать - но подвержен ложным срабатываниям, - но белый список, использующий Contains, удалит положительные совпадения, которые он не должен удалять. Например, если" плохой файл " называется "VirusInfectedmouseapi.dll" он пройдет ваш белый список, потому что он содержит "mouseapi.dll".

Я бы изменил его примерно так: во что бы то ни стало иметь список "OK files" и "bad files", но также иметь список "bad extensions" и использовать функции Path для извлечения имени файла и расширения файла для проверки:

string filenameWithExtension = Path.GetFileName(File.FullName);
string FileNameWithoutExtension = Path.GetFileNameWitoutExtension(File.FullName);
string extensionWithDot = Path.GetExtension(File.FullName);

Затем вы можете сделать сопоставление равенства вместо Contains и уменьшить количество проблем, которые вы можете получить.
Я бы также преобразовал все имена файлов в нижний регистр, прежде чем проверять их - система не заботится о регистре в именах файлов, но сравнение строк делает это по умолчанию.


Sai Parthiv

Спасибо, как мне заменить его в моем коде? Как будто мне приходится отфильтровывать файлы с несколькими расширениями.

OriginalGriff

Создайте цикл, который проверяет массив "Запрещенные расширения" на соответствие значениям, возвращаемым методом GetExtension.

Maciej Los

ОМГ превращается в ОГ! :смеяться: