Как я могу сравнить расширение файла с тем, что напечатано в текстовом поле без точки в первую очередь? - PullRequest
0 голосов
/ 03 апреля 2019

Я ищу в файлах. И в зависимости от расширения я вписываю textBox2, в котором находятся типы файлов, в которых я хочу искать. Например, если я набрал textBox2 .txt, он будет искать все текстовые файлы. Но я не хочу печатать .cs или .txt. Я хочу печатать только cs или только txt

string restrictedFile = "";
        List<string> restrictedFiles = new List<string>();
        int numberofrestrictedFiles = 0;
        int numberoffiles = 0;
        IEnumerable<string> SearchAccessibleFilesNoDistinct(string root, List<string> files,BackgroundWorker worker, DoWorkEventArgs e)
        {
            _busy.WaitOne();
            if (files == null)
                files = new List<string>();
            if (Directory.Exists(root))
            {
                foreach (var file in Directory.EnumerateFiles(root))
                {
                    if (worker.CancellationPending == true)
                    {
                        e.Cancel = true;
                        return files;
                    }
                    restrictedFile = file;
                    string ext = Path.GetExtension(file);
                    if (!files.Contains(file) && ext == textBox2.Text)
                    {
                        files.Add(file);
                    }
                    numberoffiles++;
                    label24.Invoke((MethodInvoker)delegate
                    {
                        label24.Text = numberoffiles.ToString();
                        label24.Visible = true;
                    });
                }
                foreach (var subDir in Directory.EnumerateDirectories(root))
                {
                    if (worker.CancellationPending == true)
                    {
                        e.Cancel = true;
                        return files;
                    }
                    try
                    {
                        SearchAccessibleFilesNoDistinct(subDir, files,worker, e);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        restrictedFiles.Add(restrictedFile);
                        numberofrestrictedFiles++;
                        label11.Invoke((MethodInvoker)delegate
                        {
                            label11.Text = numberofrestrictedFiles.ToString();
                            label11.Visible = true;
                        });
                        continue;
                    }
                }
            }
            return files;
        }

В этой части я получаю расширение файла и проверяю, совпадает ли оно в textBox2. Но так как расширение файла - .txt или .cs или .gif, я должен ввести textBox2 также с помощью «.» и вместо этого я хочу иметь возможность печатать только cs gif txt ....

Еще один дополнительный вопрос: как я могу сделать так, чтобы он искал во всех расширениях файлов? Например, если я наберу textBox2, он введет строку ALL или, возможно, . , поэтому он будет искать все расширения.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Path.GetExtension возвращает расширение с помощью.(.docx), поэтому вы можете изменить критерии if, чтобы добавить это автоматически:

if (!files.Contains(file) && ext == "." + textBox2.Text)
0 голосов
/ 03 апреля 2019

EnumerateFiles имеет прототип , который принимает фильтр поиска .Более эффективно позволить операционной системе фильтровать файлы, чем самостоятельно фильтровать их в коде.

Чтобы получить файлы с определенным расширением, выполните поиск следующим образом:

EnumerateFiles(root, "*." + extension);

Чтобы получить всефайлы, используйте это:

EnumerateFiles(root, "*.*");

Чтобы охватить оба случая, вы можете использовать:

var extension = Textbox2.Text;
if (string.IsNullOrWhitespace(extension)) extension = "*.*";
foreach (var file in Directory.EnumerateFiles(root, extension)
{
    //etc....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...