Filter trong bài post Cách lấy tất cả tập tin trong
thư mục trong C# còn hạn chế là bởi vì, mỗi lần sử dùng
hàm Directory.GetFiles() chúng ta chỉ truyền vô được có một loại extension. Câu
hỏi đặt ra là muốn filter với nhiều extensions thì làm sao?
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.txtD:\Files\file2.htmlD:\Files\file3.xlsxD:\Files\file4.docxD:\Files\file5.csvD:\Files\file6.pdf |
Bây giờ chúng ta sẽ đi sâu vào từng cách cụ thể như sau:
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 filterD:\Files\file1.txtD:\Files\file2.htmlD:\Files\file3.xlsxD:\Files\file4.docxD:\Files\file5.csvD:\Files\file6.pdfAfter filterD:\Files\file1.txtD:\Files\file2.htmlD:\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.htmlD:\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.txtD:\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:
Code hoàn chỉnh:
D:\Files\file4.docxD:\Files\file3.xlsxD:\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:
Before filterD:\Files\file1.txtD:\Files\file2.htmlD:\Files\file3.xlsxD:\Files\file4.docxD:\Files\file5.csvD:\Files\file6.pdfAfter filterD:\Files\file1.txtD:\Files\file2.htmlD:\Files\file5.csvThe second way:D:\Files\file2.htmlD:\Files\file3.xlsxThe third way:D:\Files\file1.txtD:\Files\file2.htmlThe fourth way:D:\Files\file4.docxD:\Files\file3.xlsxD:\Files\file5.csv |
Chúc các bạn thành công!
(theo gockinhnghiem.com)
Không có nhận xét nào:
Đăng nhận xét