Giới thiệu

.NET Framework cung cấp nhiều lớp và phương thức cho phép làm việc dễ dàng với các tập tin. Với các tập tin văn bản, lớp File chứa trong namespace System.IO được dùng phổ biến. Lớp File chứa các phương thức sau:

Phương thức Chức năng
AppendAllText Thêm một chuỗi kí tự đến một file văn bản. Nếu file văn bản này chưa tồn tại thì phải tạo ra nó đầu tiên.
Copy Sao chép một tập tin từ một vị trí đến vị trí khác.
Delete Xoá một tập tin từ nơi ổ đĩa lưu trữ.
Exists Kiểm tra một file có tồn tại hay không.
Move Di chuyển file đến vị trí khác.
ReadAllText Đọc nội dung của một tập tin văn bản.
WriteAllText Ghi nội dung đến một file mới, ghi đè lên nội dung đã có nếu file đã tồn tại.

Tạo một dự án website mới tên Web_FileManagement (chọn ngôn ngữ VB hay C#). Tạo một thư mục mới tên App_Data trong Web_FileManagement. Thêm một tập tin văn bản tên Text.txt bằng cách nhấp chuột phải vào App_Data chọn Add > Add New Item > Text File, gõ tên file là Text.txt và nhấn Add. Trong tập tin Text.txt gõ một đoạn văn bản bất kỳ, ví dụ: Xin chào các bạn:

Kiểm tra sự tồn tại của tập tin

Tạo một trang ASPX tên FileTest.aspx. Kiểm tra tập tin Text.txt có tồn tại hay không ta viết mã sau trong sự kiện Load của trang (nhấp đôi chuột để đến phương thức Page_Load):

Mã VB


Dim path As String = Server.MapPath("~/App_Data/Text.txt")
'Kiểm tra tập tin Text.txt có tồn tại hay không
Try
   If File.Exists(path) = True Then
   Response.Write("Tap tin ton tai!")
Else
   Response.Write("Tap tin khong ton tai!")
End If
   Catch ex As Exception
   Response.Write("Loi: " & e.ToString())
End Try

Mã C#


string path = Server.MapPath("~/App_Data/Text.txt");
//Kiểm tra tập tin Text.txt có tồn tại hay không
try {
      if (File.Exists(path) == true) {
        Response.Write("Tap tin ton tai!");
       } 
      else {
        Response.Write("Tap tin khong ton tai!");
      }
   } catch (Exception ex) {
      Response.Write("Loi: " + e.ToString());
}

Tạo một thư mục cùng cấp với thư mục App_Data trong website với tên là App_File:

Di chuyển tập tin

Di chuyển tập tin Text.txt từ thư mục App_Data đến thư mục App_File và có tên mới là TextNew.txt:

Mã VB


Dim path As String = Server.MapPath("~/App_Data/Text.txt")
Dim pathnew As String = Server.MapPath("~/App_File/TextNew.txt")
Try
    If File.Exists(path) = True Then
      File.Move(path, pathnew)
    Else
      Response.Write("Tap tin khong ton tai!")
    End If
Catch ex As Exception
    Response.Write("Loi: " & e.ToString())
End Try

Mã C#


string path = Server.MapPath("~/App_Data/Text.txt");
string pathnew = Server.MapPath("~/App_File/TextNew.txt");
try {
     if (File.Exists(path) == true) {
        File.Move(path, pathnew);
     } else {
        Response.Write("Tap tin khong ton tai!");
     }
} catch (Exception ex) {
   Response.Write("Loi: " + e.ToString());
}

Mở lại Solution Explorer, nhấp chuột phải vào App_File và chọn Refresh Folder sẽ xuất hiện TextNew.txt và sẽ có nội dung như Text.txt, nếu nhấp chuột vào tập tin Text.txt trong App_Data sẽ xuất hiện thông báo không tồn tại Text.txt:

Sao chép tập tin

Sao chép nội dung tâp tin từ TextNew.txt trong App_File đến tập tin Text.txt trong App_Data:

Mã VB


Dim path As String = Server.MapPath("~/App_Data/Text.txt")
Dim pathnew As String = Server.MapPath("~/App_File/TextNew.txt")
Try
   If File.Exists(pathnew) = True Then
     File.Copy(pathnew, path)
   Else
     Response.Write("Tap tin khong ton tai!")
   End If
Catch ex As Exception
     Response.Write("Loi: " & e.ToString())
End Try

Mã C#


string path = Server.MapPath("~/App_Data/Text.txt");
string pathnew = Server.MapPath("~/App_File/TextNew.txt");
try {
     if (File.Exists(pathnew) == true) {
        File.Copy(pathnew, path);
     } else {
        Response.Write("Tap tin khong ton tai!");
     }
} catch (Exception ex) {
     Response.Write("Loi: " + e.ToString());
}

Refresh Folder hai thư mục App_Data App_File trong cửa sổ Solution Explorer sẽ xuất hiện hai tập tin Text.txt và TextNew.txt có nội dung giống nhau.

Xoá tập tin

Xoá tập tin TextNew.txt trong thư mục App_File:

Mã VB


Dim path As String = Server.MapPath("~/App_Data/Text.txt")
Dim pathnew As String = Server.MapPath("~/App_File/TextNew.txt")
Try
   If File.Exists(pathnew) = True Then
      File.Delete(pathnew)
   Else
      Response.Write("Tap tin khong ton tai!")
   End If
Catch ex As Exception
     Response.Write("Loi: " & e.ToString())
End Try

Mã C#


string path = Server.MapPath("~/App_Data/Text.txt");
string pathnew = Server.MapPath("~/App_File/TextNew.txt");
try {
     if (File.Exists(pathnew) == true) {
        File.Delete(pathnew);
     } else {
        Response.Write("Tap tin khong ton tai!");
     }
} catch (Exception ex) {
     Response.Write("Loi: " + e.ToString());
}

Refresh Folder thư mục App_File sẽ không còn tập tin TextNew.txt.

 Đọc nội dung từ một tập tin

Đọc tất cả nội dung từ tập tin Text.txt trong thư mục App_Data và hiển thị ra trang:

Mã VB


Dim path As String = Server.MapPath("~/App_Data/Text.txt")
Dim content As String
Try
    If File.Exists(path) = True Then
        content = File.ReadAllText(path)
        Response.Write("<h1>" & content & "</h1>")
    Else
        Response.Write("Tap tin khong ton tai!")
    End If
Catch ex As Exception
    Response.Write("Loi: " & e.ToString())
End Try

Mã C#


string path = Server.MapPath("~/App_Data/Text.txt");
string pathnew = Server.MapPath("~/App_File/TextNew.txt");
string content;
try {
     if (File.Exists(pathnew) == true) {
        content = File.ReadAllText(path);
        Response.Write("<h1>" + content + "</h1>");
     } else {
        Response.Write("Tap tin khong ton tai!");
     }
} catch (Exception ex) {
       Response.Write("Loi: " + e.ToString());
}

Kết quả:

Thêm nội dung vào một tập tin có sẵn

Thêm nội dung vào tập tin Text.txt:

Mã VB


Dim path As String = Server.MapPath("~/App_Data/Text.txt")
Dim content As String
Try
    If File.Exists(path) = True Then
         Dim appendText As String = "Tôi là Ngoc Minh" & Environment.NewLine
         File.AppendAllText(path, appendText)
    Else
         Response.Write("Tap tin khong ton tai!")
    End If
Catch ex As Exception
      Response.Write("Loi: " & e.ToString())
End Try

Mã C#


string path = Server.MapPath("~/App_Data/Text.txt");
string content;
try {
     if (File.Exists(path) == true) {
         string appendText = "Tôi là Ngoc Minh" + Environment.NewLine;
         File.AppendAllText(path, appendText);
     }
     else {
         Response.Write("Tap tin khong ton tai!");
     }
} catch (Exception ex) {
     Response.Write("Loi: " + e.ToString());
}

Mở tập tin Text.text:

Ghi nội dung vào tập tin

Ghi nội dung vào một tập tin, nếu tập tin có sẵn thì nội dung mới sẽ được ghi đè lên nội dung cũ, nếu tập tin chưa tồn tại thì tạo tập tin:

Mã VB


Dim path As String = Server.MapPath("~/App_Data/Text.txt")
Dim pathnew As String = Server.MapPath("~/App_File/TextNew.txt")
Dim appendText As String = "Tôi là Ngoc Minh" & Environment.NewLine
Try
    If File.Exists(pathnew) = True Then
       File.WriteAllText(pathnew, appendText)
    Else
       Dim fs As FileStream = File.Create(pathnew)
       fs.Close()
       File.WriteAllText(pathnew, appendText)
    End If
Catch ex As Exception
     Response.Write("Loi: " & e.ToString())
End Try

Mã C#


string path = Server.MapPath("~/App_Data/Text.txt");
string pathnew = Server.MapPath("~/App_Data/TextNew.txt");
string appendText = "Tôi là Ngoc Minh" & Environment.NewLine;
try {
     if (File.Exists(pathnew) == true) {
         File.WriteAllText(pathnew, appendText);
     }
     else {
         FileStream fs = File.Create(pathnew);
         fs.Close();
         File.WriteAllText(pathnew, appendText);
    }
} catch (Exception ex) {
     Response.Write("Loi: " + e.ToString());
}

Quản lý tập tin upload

ASP.NET hỗ trợ FileUpload control cho phép tìm kiếm và chọn tập tin để upload đến web server. Lớp FileUpload thừa kế từ lớp WebControl và có các thuộc tính chỉ đọc (read only properties) sau:

Thuộc tính Mô tả
FileBytes Trả về một mảng chứa các bytes trong tập tin được upload.
FileContent Trả về một đối tượng Stream trỏ đến tập tin được upload.
FileName Trả về tên của tập tin được upload.
HasFile Xác định liệu control có một tập tin để upload hay không
PostedFile Trả về một tham chiếu đến tập tin được upload.

Tập tin upload được đóng gói trong một đối tượng kiểu HttpPostedFile và có thể được truy cập thông qua thuộc tính PostedFile của lớp FileUpload.

Lớp HttpPostedFile có các thuộc tính được dùng thường xuyên như sau:

Thuộc tính Mô tả
ContentLength Trả về kích cỡ của tập tin được upload theo bytes.
ContentType Trả về kiểu MIME (là cơ chế nói với trình duyệt hay client  các kiểu tài liệu khác nhau được chuyển đến) của tập tin được upload.
FileName Trả về tên của tập tin được upload.
InputStream Trả về một đối tượng Stream trỏ đến tập tin được upload.

Tạo một ứng dụng đơn giản dùng FileUpload:

Mở trang Web_FileManagement.aspx ở chế độ Design. Thêm 3 control vào trang gồm 1 FileUpload, 1 Button, và 1 Label. Chuyển trang sang chế độ Source và chỉnh sửa lại nội dung cho các control như sau:

Kết quả trong chế độ Design:

Trong sự kiện Click của button Upload viết mã như sau:

Mã VB


Protected Sub btnUpload_Click(sender As Object, e As EventArgs) 
    Handles btnUpload.Click

    Dim folderPath As String = Server.MapPath("~/Files/")
    'Kiểm tra thư mục File có tồn tại không
    If Not Directory.Exists(folderPath) Then
      'Nếu thư mục không tồn tại thì tạo nó.
      Directory.CreateDirectory(folderPath)
    End If
   'Lưu tập tin đến thư mục
    FileUpload1.SaveAs(folderPath &
          Path.GetFileName(FileUpload1.FileName))
   'Hiển thị thông điệp
   lblMessage.Text = Path.GetFileName(FileUpload1.FileName) +
                     " đã được upload thành công!"
End Sub

Mã C#


protected void btnUpload_Click (object sender, EventArgs e)
{
  string folderPath = Server.MapPath("~/Files/");
  //Kiểm tra thư mục File có tồn tại không
  if (!Directory.Exists(folderPath))
  {
    //Nếu thư mục không tồn tại thì tạo nó.
    Directory.CreateDirectory(folderPath);
  }
  //Lưu tập tin đến thư mục
  FileUpload1.SaveAs(folderPath +
              Path.GetFileName(FileUpload1.FileName));
  //Hiển thị thông điệp
  lblMessage.Text = Path.GetFileName(FileUpload1.FileName) 
                    + " đã được upload thành công!";
}

Kết quả:

Nhấn nút Choose File để chọn tập tin upload:

Chọn một tập tin bất kỳ

và nhấn nút Upload:

Kiểm tra trong cửa sổ Solution Explorer (nhớ nhấp chuột phải vào Web_FileManagement và chọn Refresh Folder):