Tôi nhớ có lần tôi code nhảm cái chương trình gì đó không nhớ rõ nữa, tôi cần phải lấy ra cái extension của file (định dạng của file hay phần mở rộng của file tùy miệng đời gọi thế nào). Tôi muốn nạp vào chương trình một file bất kỳ, sau đó nó phải trả về cho tôi biết định dạng của cái file đó.

Ý tưởng là như vậy đó.

Hiện tại tôi tìm ra được 2 cách để xử lý vấn đề này. Tùy mỗi cách mà có cái hay lẫn cái dở của nó. Do đặc thù cái này tôi thấy làm trên Windows Form sẽ đẹp và dễ hiểu hơn là làm trên Console nên trước tiên ta thiết kế ra một cái giao diện trước.

giaoDien.PNG

Tạm kéo một cái giao diện như vậy đi. Khi nhấn nút để tìm mở file thì nó sẽ xác định cho ta biết định dạng file là gì.

Cách thủ công

Tôi quyết định sẽ cho mọi thứ thực thi lúc người dùng nhấn OK xác nhận mở file. Hành động này bao hàm bên ngoài tất cả.

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{

}

Nhớ kéo 1 cái OpenFileDialog trong menu Toolbox vào cái giao diện ta đang dùng.

Tiếp tục, tôi in ra thử màn ngoài màn hình đường dẫn đầy đủ của tập tin tôi vừa mở.

string filePath = openFileDialog1.FileName.ToString();
label2.Text = filePath ;

Tôi dùng một biến chuỗi fileName để chứa đường dẫn tới tập tin vừa mở. Sau đó hiển thị đường dẫn ở một cái label trên giao diện.

getPath.PNG

Tôi lấy được đúng đường dẫn tới tập tin vừa mở. Và tôi để ý, bất kể là đường dẫn dài ngắn thế nào, không quan trọng. Quan trọng là tôi thấy phần mở rộng của nó luôn nằm ở cuối cùng.

Vậy tôi sẽ cắt chuỗi ra, bỏ đi khúc đầu lấy khúc cuối 3 ký tự.

int fileLength = openFileDialog1.FileName.Length;

string formatFile = openFileDialog1.FileName.Substring(fileLength – 3).ToString();

label2.Text = formatFile;

Như vậy là chương trình sẽ hiển thị được định dạng của file ngay. Thật ra chỗ này xử lý chưa khéo lắm, vì không phải file nào cũng có định dạng chỉ 3 ký tự thôi, ví dụ như xlsx (Excel các version mới), docx,…

Cách công thức có sẵn

Như vậy, nếu làm theo cách thủ công thì phải secure hơn tí nữa mới an toàn. Có cách nào đỡ rắc rối hơn không? Có, dùng phương thức Path.GetExtension của C# đi 😀 ta-daaa

string filePath = openFileDialog1.FileName.ToString();

string extension = Path.GetExtension(filePath);

label2.Text = extension;

Vậy là xong ngay! Nhưng nếu dùng cách này, kết quả trả về luôn có dấu chấm (.) ở trước mỗi extension. Nhưng đâu có sao! haha

Dùng hàm cắt bỏ đi ký tự đầu là xong ngay thôi 😀

label2.Text = extension.Remove(0 , 1);

VÕ TÌNH THƯƠNG

votinhthuong9@gmail.com