02/10/2018, 20:45

Quản lý các files của một thư mục với asp.net - C#

hmweb- Trong bài viết này tôi sẽ minh họa cách quản lý các files (Liệt kê, Xóa một hoặc nhiều file được chọn) của một thư mục được chỉ định sử dụng ngôn ngữ C# - asp.net Để quản lý files trong thư mục nào đó bạn cần sử dụng thư viện System.IO. hmweb- Trong bài viết này ...

hmweb- Trong bài viết này tôi sẽ minh họa cách quản lý các files (Liệt kê, Xóa một hoặc nhiều file được chọn) của một thư mục được chỉ định sử dụng ngôn ngữ C# - asp.net Để quản lý files trong thư mục nào đó bạn cần sử dụng thư viện System.IO.

hmweb- Trong bài viết này tôi sẽ minh họa cách quản lý các files (Liệt kê,  Xóa một hoặc nhiều file được chọn) của một thư mục được chỉ định sử dụng ngôn ngữ C# - asp.net

Để quản lý files trong thư mục nào đó bạn cần sử dụng thư viện System.IO.

+ Liệt kê các files của một thư mục.

Để liệt kê các file của một thư mục bạn sử dụng class DirectoryInfo của thư viện System.IO. Khi sử dụng DirectoryInfo(string path) và GetFiles() bạn có thể liệt kê toàn bộ (hoặc một định dạng file nào đó (*.txt, *.doc, ..)) danh sách các files của thư mục. Với hàm này bạn sẽ có đầy đủ các thông tin của một file đó là:
- Name: Tên file
- Length: Độ lớn của file (Đơn vị là byte).
- DirectoryName: Thư mục của file đó
- FullName: Tên và đường dẫn đầy đủ của file
- Extension: Loại file (doc, txt, ...    )
- CreationTime: Thời gian file được tạo
Ngoài ra còn một số trường khác như IsReadOnly, Exists, ...

Ví dụ bạn tạo một gridview GridView1 với thuộc tính AutoGenerateColumns="true" và trong code bạn viết như sau

DirectoryInfo dir = new DirectoryInfo(Server.MapPath("jquery/"));
GridView1.DataSource = dir.GetFiles("*.*");
GridView1.DataBind();

Khi đó  GridView1 sẽ chứa đầy đủ thông tin của tất các các file trong thư mục jquery trong thư mục gốc của ứng dụng của bạn. Nếu bạn chỉ muốn lấy các file txt bạn dùng dir.GetFiles("*.txt");

+ Xóa files được chọn trong danh sách files của một thư mục

Tiếp theo tôi sẽ minh họa cách chọn và xóa file được chọn. Giờ tôi sẽ sửa GridView1 và chỉ lấy các trường Name, Length và Extension và thêm một cột để chọn files và Button để thực hiện việc xóa file. Chú ý là các trường này tôi đã chuyển sang TemplateField.

Quản lý các files của một thư mục với asp.net - C#
Hình ảnh minh họa của bài viết (Các file trong thư mục jquery của ứng dụng)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    BackColor="#CCCCCC" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" 
    CellPadding="2" Width="400px">
    <RowStyle ForeColor="#000066" />
    <Columns>
        <asp:TemplateField HeaderText="Chọn">
            <ItemTemplate>
                <asp:CheckBox ID="chkChon" runat="server" />
            </ItemTemplate>
            <ItemStyle HorizontalAlign="Center" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Tên file">
            <ItemTemplate>
                <asp:Label ID="lblTenfiles" runat="server" Text='<%# Bind("Name") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Độ lớn">
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("Length") %>' />
            </ItemTemplate>
            <ItemStyle HorizontalAlign="Right" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Loại file">
            <ItemTemplate>
                &nbsp;&nbsp;&nbsp;
                <asp:Label ID="Label2" runat="server" Text='<%# Bind("Extension") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
</asp:GridView>
<br />
<asp:Button ID="btDelete" runat="server" onclick="btDelete_Click" 
    Text="Xóa file đã chọn" />

Giờ trong code tôi viết như sau:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        LietKeFiles();
    }
}
private void LietKeFiles()
{
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("jquery/"));
    GridView1.DataSource = dir.GetFiles("*.*");
    GridView1.DataBind();
}
protected void btDelete_Click(object sender, EventArgs e)
{
    bool chon = false;
    for (int i = 0; i < GridView1.Rows.Count; i++)
    {
        chon = bool.Parse(((CheckBox)GridView1.Rows[i].Cells[0].Controls[1]).Checked.ToString());
        Label lblTenFile = ((Label)GridView1.Rows[i].Cells[1].Controls[1]);
        if (chon == true)
        {
            DeleteFile(Server.MapPath("jquery/") + lblTenFile.Text + "");
        }
    }
    LietKeFiles();
}
/// <summary>
/// Xóa một file được chọn
/// </summary>
/// <param name="fileName"></param>
private void DeleteFile(string fileName)
{
    try
    {
        FileInfo fi;
        if (System.IO.File.Exists(fileName) == true)
        {
            fi = new FileInfo(fileName);
            fi.Delete();
        }
    }
    catch (Exception ex) { ex.Message.ToString(); }
}

Trong code trên bạn thấy tôi có viết một hàm DeleteFile(string fileName) để thực hiện việc xóa file được chọn. Trong grid bạn có thể chọn xóa nhiều file một lúc bằng cách chọn CheckBox ở cột đầu tiên (Có chỉ số index=0) Bạn có thể thấy trong hàm btDelete_Click tôi sử dụng vòng lặp để duyệt tất các các bản ghi của Grid và nếu bản ghi nào được chọn thì khi nhất nut "Xóa file đã chọn" thì file đó sẽ được xóa khỏi thư mục trong ổ cứng của bạn.

Ứng dụng bài viết này có thể là quản lý các ảnh đại diện của một bài viết (thường khi tạo website và phần viết bài bạn cho phép chọn ảnh đại diện của bài viết và được lưu ở thư mục nào đó trên thư mục của ứng dụng web (Server.MapPath). khi xóa bài viết nếu không quản lý việc xóa file thì bài viết đã được xóa nhưng file ảnh đại diện của bài viết đó vẫn còn trên thư Server.MapPath).

Bạn có thể download code của bài viết tại đây. Bạn có thể tham khảo bải viết "Xây dựng thư viện xử lý file với C# "  để có các hàm Tạo file, sửa file, xóa file, ...

Hy vọng bài viết có ích với bạn.

Nguồn: http://www.thietkewebsmart.com/asp-net-csharp/quan-ly-cac-files-cua-mot-thu-muc-voi-asp-net-c-/669.htm


Bình luận
0