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!