Hôm nay chúng ta sẽ tìm hiểu một vài cách dùng nhiều extensions để filter tập tin.Tình huống chúng ta sẽ có một thư mục Files trong ổ D: chứa danh sách 6 tập tin với nhiều loại extension như bên dưới:

D:\Files\file1.txt
D:\Files\file2.html
D:\Files\file3.xlsx
D:\Files\file4.docx
D:\Files\file5.csv
D:\Files\file6.pdf

Bây giờ chúng ta sẽ đi sâu vào từng cách cụ thể như sau:

CÁCH 1:

public void GetFilesByFilter1()
{
    txtInfo.Text = "Before filter" + Environment.NewLine;
    string[] files = Directory.GetFiles(@"D:\Files");
    foreach (string file in files)
    {
        txtInfo.Text += file + Environment.NewLine;
    }

    /* Using LinQ to filter by extention */
    string[] fileExtention = { ".html", ".txt", ".csv" };
    txtInfo.Text += "After filter" + Environment.NewLine;
    var filteredFiles = files.Where(f => fileExtention.Any(e => f.EndsWith(e)));
    foreach (var file in filteredFiles)
    {
        txtInfo.Text += file + Environment.NewLine;
    }
}

=> Kết quả thu được như sau:

Before filter
D:\Files\file1.txt
D:\Files\file2.html
D:\Files\file3.xlsx
D:\Files\file4.docx
D:\Files\file5.csv
D:\Files\file6.pdf
After filter
D:\Files\file1.txt
D:\Files\file2.html
D:\Files\file5.csv

CÁCH 2:

public void GetFilesByFilter2()
{
    IEnumerable filteredFiles = new List();
    string[] filters = { "*.html", "*.xlsx", "*.xml" };
    foreach (string filter in filters)
    {
        filteredFiles = filteredFiles.Concat(Directory.GetFiles(@"D:\Files", filter).AsEnumerable());
    }

    /* Get Files by filter list */
    foreach (var file in filteredFiles)
    {
        txtInfo.Text += file + Environment.NewLine;
    }
}

=> Kết quả thu được như sau:

D:\Files\file2.html
D:\Files\file3.xlsx

CÁCH 3:

public void GetFilesByFilter3()
{
    string extension1 = ".html";
    string extension2 = ".txt";
    var filteredFiles = Directory.GetFiles(@"D:\Files").Where(f=>f.Contains(extension1) || f.Contains(extension2));
    foreach (var file in filteredFiles)
    {
        txtInfo.Text += file + Environment.NewLine;
    }
}

=> Kết quả thu được như sau:

D:\Files\file1.txt
D:\Files\file2.html

CÁCH 4:

public void GetFilesByFilter4()
{
    string filters = "*.docx|*.xlsx|*.csv";
    var filteredFiles = filters.Split('|').SelectMany(filter => Directory.GetFiles(@"D:\Files", filter, SearchOption.AllDirectories)).ToList();
    foreach (var file in filteredFiles)
    {
        txtInfo.Text += file + Environment.NewLine;
    }
}

=> Kết quả thu được như sau:

D:\Files\file4.docx
D:\Files\file3.xlsx
D:\Files\file5.csv

CODE HOÀN CHỈNH:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WinFormsApp
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
            txtInfo.Text += "The first way: " + Environment.NewLine;
            GetFilesByFilter1();
            txtInfo.Text += Environment.NewLine + "The second way: " + Environment.NewLine;
            GetFilesByFilter2();
            txtInfo.Text += Environment.NewLine + "The third way: " + Environment.NewLine;
            GetFilesByFilter3();
            txtInfo.Text += Environment.NewLine + "The fourth way: " + Environment.NewLine;
            GetFilesByFilter4();
        }

        public void GetFilesByFilter1()
        {
            txtInfo.Text = "Before filter" + Environment.NewLine;
            string[] files = Directory.GetFiles(@"D:\Files");
            foreach (string file in files)
            {
                txtInfo.Text += file + Environment.NewLine;
            }

            /* Using LinQ to filter by extention */
            string[] fileExtention = { ".html", ".txt", ".csv" };
            txtInfo.Text += "After filter" + Environment.NewLine;
            var filteredFiles = files.Where(f => fileExtention.Any(e => f.EndsWith(e)));
            foreach (var file in filteredFiles)
            {
                txtInfo.Text += file + Environment.NewLine;
            }
        }

        public void GetFilesByFilter2()
        {
            IEnumerable filteredFiles = new List();
            string[] filters = { "*.html", "*.xlsx", "*.xml" };
            foreach (string filter in filters)
            {
                filteredFiles = filteredFiles.Concat(Directory.GetFiles(@"D:\Files", filter).AsEnumerable());
            }

            /* Get Files by filter list */
            foreach (var file in filteredFiles)
            {
                txtInfo.Text += file + Environment.NewLine;
            }
        }

        public void GetFilesByFilter3()
        {
            string extension1 = ".html";
            string extension2 = ".txt";
            var filteredFiles = Directory.GetFiles(@"D:\Files").Where(f=>f.Contains(extension1) || f.Contains(extension2));
            foreach (var file in filteredFiles)
            {
                txtInfo.Text += file + Environment.NewLine;
            }
        }

        public void GetFilesByFilter4()
        {
            string filters = "*.docx|*.xlsx|*.csv";
            var filteredFiles = filters.Split('|').SelectMany(filter => Directory.GetFiles(@"D:\Files", filter, SearchOption.AllDirectories)).ToList();
            foreach (var file in filteredFiles)
            {
                txtInfo.Text += file + Environment.NewLine;
            }
        }
    }
}

=> Kết quả thu được là:

Before filter
D:\Files\file1.txt
D:\Files\file2.html
D:\Files\file3.xlsx
D:\Files\file4.docx
D:\Files\file5.csv
D:\Files\file6.pdf
After filter
D:\Files\file1.txt
D:\Files\file2.html
D:\Files\file5.csv
The second way:
D:\Files\file2.html
D:\Files\file3.xlsx
The third way:
D:\Files\file1.txt
D:\Files\file2.html
The fourth way:
D:\Files\file4.docx
D:\Files\file3.xlsx
D:\Files\file5.csv

Chúc thành công!

Loading

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *