01/10/2018, 17:19

Cách đổi tên tự động nhiều tập tin trong C#

Hôm nay rãnh rỗi, ngồi mở thư mục images trong máy tính mình ra để xem những kỷ niệm đẹp, những buổi đi dã ngoại cùng gia đình và bạn bè. Hình ảnh sắp sếp lộn xộn, không theo một trật tự nào hết. Bây giờ muốn đổi tên chúng lại cho nó ngăn nắp, mà chẳng lẽ ngồi đổi bằng tay hả? Mấy trăm tấm, mấy ...

Hôm nay rãnh rỗi, ngồi mở thư mục images trong máy tính mình ra để xem những kỷ niệm đẹp, những buổi đi dã ngoại cùng gia đình và bạn bè. Hình ảnh sắp sếp lộn xộn, không theo một trật tự nào hết.

Bây giờ muốn đổi tên chúng lại cho nó ngăn nắp, mà chẳng lẽ ngồi đổi bằng tay hả? Mấy trăm tấm, mấy ngàn tấm hình lận đó. Có cách nào tự động đổi tên tập tin, mà độ chính xác cao, không cần mất quá nhiều thời gian không ta?

Trong photoshop, có hỗ trợ chức năng đổi tên hàng loạt, và theo qui định của mình. Nhưng sử dụng photophop đổi hoài cũng vậy. Hôm nay, làm cách nào mới đi nhỉ. Uhm, …

Vậy mình viết một chương trình đổi tên tập tin bằng C# đi nhỉ. Đọc đến đây chắc hẳn mọi người sẽ nói  mình rãnh.

Nhưng mà không rãnh đâu, bạn cài photoshop thì mất mấy GB ổ cứng, còn chương trình của mình chỉ mất có 12KB, nhẹ tênh đó nhé. Và bộ sưu tầm phần mềm của mình có thêm cái module nho nhỏ, đó là module đổi tên tập tin.

Cách làm như sau:

Bước 1: tạo một form chứa các control như sau:

–       TextBox tên “txtDirectory” để chứa thư mục đường dẫn chứa các tập tin cần đổi.

–       Button tên “btnOpenDirectory” để mở thư mục bạn muốn trỏ đến

–       TextBox tên “txtTotalFile” đếm tổng số tập tin có trong thư mục

–       TextBox tên “txtFileName” chứa phần đầu của tên tập tin bạn muốn đổi

–       NumericUpDown tên “nupStartedNumber” số thứ tự bắt đầu đánh dấu cho tên tập tin

–       Button tên “btnRename” để thực hiện việc đổi tên tập tin

Bước 2:

Khi Buttton “btnRename” được nhấn, chương trình sẽ gọi hàm đổi tên tập tin có cú pháp như sau

System.IO.File.Move(string sourceFileName, string destFileName);

Trong đó:

  • sourceFileName: tên tập tin trước khi đổi
  • destFileName: tên tập tin sau khi đổi

    Dưới đây là code hoàn chỉnh của phần đổi tên tập tin, code được viết trên VS2010:

    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;
    
    namespace RenamedFiles
    {
        public partial class FormMain : Form
        {
            string[] files = null;
            public FormMain()
            {
                InitializeComponent();
            }
    
            private void btnOpenDirectory_Click(object sender, EventArgs e)
            {
                FolderBrowserDialog fld = new FolderBrowserDialog();
                fld.RootFolder = Environment.SpecialFolder.MyComputer;
                fld.ShowDialog();
                txtDirectory.Text = fld.SelectedPath;
                files = System.IO.Directory.GetFiles(txtDirectory.Text.Trim());
                txtTotalFile.Text = files.Length.ToString();
            }
    
            private void btnRename_Click(object sender, EventArgs e)
            {
                // Lấy tất cả các tập tin trong thư mục truyền vào
                if (files == null)
                    return;
                string originalFile = "", renamedFile = "";
                int countSuccess = 0, startedNumber = (int)nupStartedNumber.Value;
    
                for (int i = 0; i < files.Length; i++)
                {
                    originalFile = files[i];
    
                    // cắt chuỗi bởi dấu '.' -> lấy phần mở rộng của tập tin, ví dụ .jpg, .doc, ...
                    string[] fileParts = originalFile.Split(new char[] { '.' });
    
                    // Tạo đường dẫn và tập tin đích
                    renamedFile = txtDirectory.Text.Trim() + @"\" + txtFileName.Text.Trim() + " " + startedNumber++ + "." + fileParts[fileParts.Length - 1];
    
                    // Kiểm tra tập tin nguồn & đích
                    // Nếu tập tin nguồn không tồn tại hoặc tập tin đích đã tồn tại rồi thì bỏ qua, không đổi tên
                    if (!System.IO.File.Exists(originalFile) && System.IO.File.Exists(renamedFile))
                        continue;
    
                    // Đổi tên sau khi kiểm tra hợp lệ
                    System.IO.File.Move(originalFile, renamedFile);
                    countSuccess++; // biến đếm tăng lên 1 khi đổi tên thành công
                }
                MessageBox.Show("Success" + " " + countSuccess);
                files = null;
                txtDirectory.Text = "";
                txtTotalFile.Text = "0";
            }
        }
    }

    Chúc các bạn thành công! :lol:


    0