Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
ILamerok
0 / 0 / 3
Регистрация: 02.06.2018
Сообщений: 46
#1

Исключения в поиске файлов по маскам - C# WPF

14.07.2018, 04:53. Просмотров 115. Ответов 3
Метки нет (Все метки)

Есть поиск файлов по маскам : Код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
            Dispatcher.BeginInvoke(new ThreadStart(delegate { listBox1.Items.Clear(); }));
            Dispatcher.BeginInvoke(new ThreadStart(delegate { Index.IsEnabled = false; }));
 
            string[] Filter = { @"\.[aA][mM][cC]", @"\.[aA][hH][kK]", @"[rR][uU][sS][tT].{0,}\.(exe|rar)$", @"[hH][aA][kK][sS].{0,}\.(exe|rar)$", @"[gG][iI][tT].{0,}\.(exe|rar)$", @"[bB][oO][xX].{0,}\.(exe|rar)$", "HackLoader.dll", "RustInterceptor.dll", "LoaderAPIDll.dll", @"\.[aA][mM][cC][2]", @"\.[mM][nN][gG]", @"\.[mM][nN][gG][2]", @"\.[mM][eE][fF][xX]", "Bloody6.exe", "Bloody5.exe", "Bloody.exe", "OscarEditor.exe", "LegitHelpers.exe","LegitHelper.exe","LegitHelpers.MacroEngine.exe", "LegitHelper.MacroEngine.exe", @"[aA][uU][tT]oO][hH][oO][tT][kK][eE][yY].{0,}\.(exe|rar)$", "me_core.dll", "Макроскин.exe","MacroEffect.exe","MacrosEffect.exe","haksclub.exe","GamingMouse.exe", "countMacro.dat"};
            string line;
            using (FileStream f = new FileStream(System.IO.Path.GetTempPath()+"//INDEX_C.txt", FileMode.Open))
 
            {
                using (StreamReader sr = new StreamReader(f, Encoding.UTF8))
                    while ((line = sr.ReadLine()) != null)
                    {
                        for (int i = 0; i < 9; i++)
                        {
                            string FilterKey = Filter[i];
                            if (Regex.IsMatch(line, FilterKey)) Dispatcher.BeginInvoke(new ThreadStart(delegate { listBox1.Items.Add(line); }));
 
                        }
                    }
            }
 
            Dispatcher.BeginInvoke(new ThreadStart(delegate { Index.IsEnabled = true; }));
 
        }
Выводит подозрительные файлы в лист бокс.Как сделать исключения,чтобы например папки в которых есть название "Microsoft" не выводились
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2018, 04:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Исключения в поиске файлов по маскам (C# WPF):

Перенос файлов по нескольким маскам
Нужно перести файлы в другую директорию по нескольким маскам/ Написала так...

Поиск файлов по нескольким маскам в папках и подпапках
как осуществить поиск файлов сразу по нескольким маскам в папках и подпапках ?...

Общий метод переименования файлов каталога по маскам
Здравствуйте, уважаемые! В связи с изменением имени приходящих файлов, нужно...

Копирование файлов по маскам, записанным в текстовом файле
Доброе время суток, уважаемые. Передо мной стоит следующая задача: Есть...

Удаление файлов по нескольким маскам из нескольких каталогов
Помогите со скриптом. Задача следующая. Имеется некая программа к которой...

Сбор файлов по маскам со всех дисков и их архивирование в exe-файл на флешку
Золотые вы мои друзя. Пытаюсь реализовать бат файл с таким набором. Сбор...

3
Casper-SC
Эксперт .NET
3581 / 1801 / 345
Регистрация: 27.03.2010
Сообщений: 5,064
Записей в блоге: 1
14.07.2018, 20:42 #2
Лучший ответ Сообщение было отмечено ILamerok как решение

Решение

Что-то вроде такого должно быть, а не смесь из работы с UI и твоего алгоритма фильтрации. И переменные обычно с маленькой буквы именуются. Или хотя бы везде в едином стиле.

Работу не проверял.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Threading;
using System.Windows;
 
namespace WpfListBox
{
    public partial class MainWindow : Window
    {
        private readonly Logic _logic;
        private CancellationTokenSource _cts;
 
        public MainWindow()
        {
            InitializeComponent();
 
            string[] filter =
            {
                @"\.[aA][mM][cC]", @"\.[aA][hH][kK]", @"[rR][uU][sS][tT].{0,}\.(exe|rar)$",
                @"[hH][aA][kK][sS].{0,}\.(exe|rar)$", @"[gG][iI][tT].{0,}\.(exe|rar)$",
                @"[bB][oO][xX].{0,}\.(exe|rar)$", "HackLoader.dll", "RustInterceptor.dll", "LoaderAPIDll.dll",
                @"\.[aA][mM][cC][2]", @"\.[mM][nN][gG]", @"\.[mM][nN][gG][2]", @"\.[mM][eE][fF][xX]", "Bloody6.exe",
                "Bloody5.exe", "Bloody.exe", "OscarEditor.exe", "LegitHelpers.exe", "LegitHelper.exe",
                "LegitHelpers.MacroEngine.exe", "LegitHelper.MacroEngine.exe",
                @"[aA][uU][tT]oO][hH][oO][tT][kK][eE][yY].{0,}\.(exe|rar)$", "me_core.dll", "Макроскин.exe",
                "MacroEffect.exe", "MacrosEffect.exe", "haksclub.exe", "GamingMouse.exe", "countMacro.dat"
            };
 
            _logic = new Logic(filter, new[] { "Microsoft" }, new[] { "mics.exe" });
            _logic.FiltrationCompleted += Logic_FiltrationCompleted;
            _logic.MatchFound += Logic_MatchFound;
        }
 
        private void Logic_MatchFound(object sender, InfoEventArgs e)
        {
            listBox1.Items.Add(e.Result);
            if (e.SuspiciousFile)
            {
                MessageBox.Show(this, "Аляяяярм!!! Подозрительный файл!");
            }
        }
 
        private void Logic_FiltrationCompleted(object sender, EventArgs e)
        {
            index.IsEnabled = true;
        }
 
        private async void StartFilteringButton_Click(object sender, RoutedEventArgs e)
        {
            if (_cts != null)
            {
                return;
            }
 
            listBox1.Items.Clear();
            index.IsEnabled = false;
 
            _cts = new CancellationTokenSource();
 
            try
            {
                await _logic.DoWorkAsync(_cts.Token);
            }
            catch (OperationCanceledException ex)
            {
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.ToString());
            }
            finally
            {
                _cts.Dispose();
                _cts = null;
            }
        }
 
        private void StopFilteringButton_Click(object sender, RoutedEventArgs e)
        {
            _cts?.Cancel();
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
 
namespace WpfListBox
{
    public sealed class Logic
    {
        private readonly string[] _regExpressions;
        private readonly string[] _exceptions;
        private readonly string[] _suspiciousFiles;
 
        private readonly SynchronizationContext _syncContext;
 
        public Logic(string[] regExpressions, string[] exceptions, string[] suspiciousFiles)
        {
            _regExpressions = regExpressions;
            _exceptions = exceptions;
            _suspiciousFiles = suspiciousFiles;
 
            _syncContext = SynchronizationContext.Current ?? new SynchronizationContext();
        }
 
        /// <summary> Найдено совпадение. </summary>
        public event EventHandler<InfoEventArgs> MatchFound;
 
        /// <summary> Фильтрация завершена. </summary>
        public event EventHandler<EventArgs> FiltrationCompleted;
 
        public async Task DoWorkAsync(CancellationToken cancellationToken)
        {
            await Task.Run(() =>
            {
                using (FileStream fs = new FileStream(Path.Combine(Path.GetTempPath(), "INDEX_C.txt"), FileMode.Open))
                {
                    using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
                    {
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            for (int i = 0; i < _regExpressions.Length; i++)
                            {
                                cancellationToken.ThrowIfCancellationRequested();
 
                                string filterKey = _regExpressions[i];
                                if (Regex.IsMatch(line, filterKey))
                                {
                                    bool found = FindInCollection(line, _exceptions);
                                    if (!found)
                                    {
                                        bool suspiciousFile = FindInCollection(line, _suspiciousFiles);
                                        OnMatchFound(new InfoEventArgs(suspiciousFile, line));
                                    }
                                }
                            }
                        }
                    }
                }
 
                OnFiltrationCompleted();
            }, cancellationToken);
        }
 
        private bool FindInCollection(string line, string[] collection)
        {
            bool found = false;
            for (int j = 0; j < collection.Length; j++)
            {
                if (line.Contains(collection[j]))
                {
                    found = true;
                }
            }
 
            return found;
        }
 
        private void OnFiltrationCompleted()
        {
            _syncContext.Post((d) =>
            {
                FiltrationCompleted?.Invoke(this, EventArgs.Empty);
            }, null);
        }
 
        private void OnMatchFound(InfoEventArgs e)
        {
            _syncContext.Post((d) =>
            {
                MatchFound?.Invoke(this, e);
            }, null);
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
 
namespace WpfListBox
{
    public class InfoEventArgs : EventArgs
    {
        public InfoEventArgs(bool suspiciousFile, string result)
        {
            SuspiciousFile = suspiciousFile;
            Result = result;
        }
 
        /// <summary>
        /// Подозрительный файл.
        /// </summary>
        public bool SuspiciousFile { get; private set; }
 
        public string Result { get; private set; }
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<Window x:Class="WpfListBox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-namespace:WpfListBox"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="MainWindow"
        Width="800"
        Height="450"
        mc:Ignorable="d">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="10*" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
 
        <ListBox x:Name="listBox1" Margin="10,10,10,0" />
 
        <Button Grid.Row="1"
                Width="110"
                Height="20"
                Margin="10,0,0,8"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Click="StartFilteringButton_Click"
                Content="Старт" />
 
        <Button Grid.Row="1"
                Width="110"
                Height="20"
                Margin="137,0,0,8"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Click="StopFilteringButton_Click"
                Content="Стоп" />
    </Grid>
</Window>
1
ILamerok
0 / 0 / 3
Регистрация: 02.06.2018
Сообщений: 46
15.07.2018, 00:24  [ТС] #3
Casper-SC, Спасибо большое,не первый раз выручаете!

Добавлено через 1 час 51 минуту
Casper-SC, Не по теме,не подскажите,как сделать чтобы файлы с определенным названием(или расширением) подсвечивались в listbox1?
0
Casper-SC
Эксперт .NET
3581 / 1801 / 345
Регистрация: 27.03.2010
Сообщений: 5,064
Записей в блоге: 1
15.07.2018, 08:33 #4
Лучший ответ Сообщение было отмечено ILamerok как решение

Решение

ILamerok, вообще тебе нужно гуглить, как использовать DataTemplateSelector

https://professorweb.ru/my/WPF/binding_and_styles_WPF/level20/20_4.php
https://stackoverflow.com/questions/...644414#5644414

Добавлено через 1 минуту
По первой ссылке есть класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class CategoryHighlightTemplateSelector : DataTemplateSelector
{
        public DataTemplate EconomyMiddleClassDataTemplate { get; set; }
        public DataTemplate BuisnessPremiumClassDataTemplate { get; set; }
 
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            CarTable car = (CarTable)item;
 
            switch (car.CategoryID)
            {
                case 1:
                    return EconomyMiddleClassDataTemplate;
                case 2:
                    return EconomyMiddleClassDataTemplate;
                case 3:
                    return BuisnessPremiumClassDataTemplate;
                case 4:
                    return BuisnessPremiumClassDataTemplate;
                default:
                    return null;
            }
        }
}
Тебе нужно вместо идентификатора вычислять какой шаблон подставлять распарсив строку.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2018, 08:33
Привет! Вот еще темы с решениями:

Феномен, при поиске файлов
Феномен при поиске файло Начинаю искать файлы на диске где установлена...

Исключение при поиске файлов
Здравствуйте, пишу программу для поиска всех txt файлов на диске. написал...

Исключения и поиск файлов
ПО существу: На входе имеется список директорий, нам нужно их просканировать,...

Отказано в доступе при поиске файлов
Доброго времени суток. Помогите решить проблему с доступом. Моя програма...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru