Cách đọc file text trong winform C#

Bình thường, khi bạn viết một ứng dụng đọc file, thường thì bạn mở ứng dụng lên rồi chọn đường dẫn đến file text, xml hay file bất kỳ để đọc, hôm nay,mình xin hướng dẫn các bạn viết ứng dụng đọc trực tiếp, double click vào file text tự động đọc file text vào ứng dụng của mình.

Video tham khảo:

Đầu tiên các bạn import những thư viện này vào:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Forms;

- Viết sự kiện cho form load

private void Form1_Load[object sender, EventArgs e]
    {
        string[] args = System.Environment.GetCommandLineArgs[];
        string filePath = args[0];
        for [int i = 0; i  0]
{
    bufOutput.Write[buffer, 0, bytesRead];

}

–  Chỉ có một khác biệt mà bạn phải nhớ cho là phải tuôn ghi [flush] nội dung của buffer khi bạn muốn bảo đảm là dữ liệu được ghi lên đĩa.

bufOutput.Flush[];

–  Lệnh trên bảo hệ điều hành lấy toàn bộ dữ liệu trên buffer cho tuôn ra ghi lên tập tin trên đĩa.

4.  Làm việc với những tập tin văn bản

–  Nếu bạn biết file bạn đang làm việc [đọc/viết] thuộc loại văn bản nghĩa là dữ liệu kiểu string, thì bạn nên nghĩ đến việc sử dụng đến các lớp StreamReader và StreamWriter. Cả hai lớp theo mặc nhiên làm việc với ký tự Unicode. Tuy nhiên bạn có thể thay đổi điều này bằng cách cung cấp một đối tượng quy chiếu được cấu hình một cách thích hợp theo System.Text.Reference. Nói tóm lại hai lớp này được thiết kế để thao tác dễ dàng các tập tin loại văn bản.

–  Lớp StreamReader được dẫn xuất từ một lớp abstract mang tên TextReader cũng giống như String Reader. Lớp cơ bản TextReader cung cấp một số chức năng hạn chế cho mỗi hậu duệ, đặc biệt khả năng đọc và “liếc nhìn” [peek] lên một dòng ký tự [character stream].

–  Lớp StreamWriter và StringWriter cũng được dẫn xuất từ một lớp abstract mang tên TextWriter; lớp này định nghĩa những thành viên cho phép các lớp dẫn xuât viết những dữ liệu văn bản lên một dòng văn bản nào đó.

–  Các hàm thành viên của lớp TextWriter

Close[] Cho đóng lại các writer và giải phóng mọi nguồn lực chiếm dụng
Flush[] Cho xoá sạch tất cả các buffer đối với writer hiện hành
NewLine Thuộc tính này dùng làm hằng sang hằng
Write[] Viết một hằng lên text stream không có newline constant
WriteLine[] Viết một hằng lên text stream có newline constant

Ví dụ đọc, viết một tập tin văn bản:

–  Ví dụ ReadWriteText trình bày cách sử dụng của lớp StreamReader và StreamWriter. Nó trình bày file được đọc vào và hiển thị Nó cũng có thể lưu file. Nó sẽ lưu bất kỳ file ở định dạng Unicode .

–  Màn hình trình bày ReadWriteText được dùng hiển thị ở chương trình demo. Chúng ta có thể đọc được ở nhiều định dạng file khác.

–  Chúng ta nhìn vào đoạn mã sau. Trước tiên ta thêm câu lệnh using , Từ đây bên cạnh System.IO, chúng ta sử dụng  lớp StringBuilder từ System.Text namespace để xây dựng chuỗi trong textbox:

using System.Text;
using System.IO;

–  Tiếp theo chúng ta thêm các trường cho lớp main form:

public partial class Form1 : Form {
     private OpenFileDialog FileOpen = new OpenFileDialog[];
     private string chooseFile;

–  Chúng ta cũng cần thêm vài chuẩn mã Windows Forms để thực hiện điều khiển cho menu và hộp thoại:

public Form1[]
{
    InitializeComponent[];
    this.MaximizeBox = false;
    this.StartPosition = FormStartPosition.CenterScreen;
    FileOpen.FileOk += new CancelEventHandler[FileOpen_FileOk];
}

private void openToolStripMenuItem_Click[object sender, EventArgs e]
{
    FileOpen.ShowDialog[];
}
void FileOpen_FileOk[object sender, CancelEventArgs e]
{
    chooseFile = FileOpen.FileName;
    this.Text = Path.GetFileName[chooseFile];
    DisplayFile[];
}

–  Từ đây chúng ta thấy mỗi khi người sử dụng nhấn OK để chọn một file trong hộp thoại, chúng ta gọi phương thức DisplayFile[], dùng để đọc file.

private void DisplayFile[]
{
    int nCols = 16;
    FileStream inStream = new FileStream[chooseFile, FileMode.Open,
                                                     FileAccess.Read];
    long nBytesToRead = inStream.Length;
    if [nBytesToRead > 65536 / 4]
        nBytesToRead = 65536 / 4;
    int nLines = [int][nBytesToRead / nCols] + 1;
    string[] lines = new string[nLines];
    int nBytesRead = 0;
    for [int i = 0; i < nLines; i++]
    {
        StringBuilder nextLine = new StringBuilder[];
        nextLine.Capacity = 4 * nCols;
        for [int j = 0; j < nCols; j++]
        {
            int nextByte = inStream.ReadByte[];
            nBytesRead++;
            if [nextByte < 0 || nBytesRead > 65536]
                break;
            char nextChar = [char]nextByte;
            if [nextChar < 16]
                nextLine.Append[" x0" + string.Format["{0,1:X}",
                                                     [int]nextChar]];
            else if [char.IsLetterOrDigit[nextChar] ||
                                     char.IsPunctuation[nextChar]]
                nextLine.Append[" " + nextChar + " "];
            else nextLine.Append[" x" + string.Format["{0,2:X}",
                                       [int]nextChar]];
        }
        lines[i] = nextLine.ToString[];
    }

    inStream.Close[];
    richTextBox.Lines = lines;

}

–  Như vậy chúng ta đã mở được file  nhờ phương thức DisplayFile[]. bây giờ chúng ta xử lý cách để lưu file chúng ta thêm đoạn mã SaveFile[]. Bạn nhìn vào phương thức SaveFile[] chúng ta viết mỗi dòng ra textbox, bằng  stream StreamWriter

void SaveFile[]
{
    StreamWriter sw = new StreamWriter[chooseFile, false,
                          Encoding.Unicode];
    foreach [string line in richTextBox.Lines]
        sw.WriteLine[line];
    sw.Close[];
}

–  Bây giờ ta xem xét làm thế nào file được đọc vào. Trong quá trình xử lý thực sự chúng ta không biết có bao nhiêu dòng sẽ được chứa. Chúng ta giải quyết vấn đề này bằng cách ban đầu đọc file vào trong lớp đại diện StringCollection, được nằm trong System.Collections.Specialized namespace. Lớp này được thiết kế để giữ một bộ của chuỗi có thể được mở rộng một cách linh hoạt. Nó thực thi hai phương thức : Add[], nó thêm một chuỗi vào bộ chọn lựa [collection] , và CopyTo[], nó sao chép string collection vào trong một mảng. Mỗi thành phần của đối tượng StringCollection object sẽ giữ 1 hàng của file.

–  Bây giờ chúng ta sẽ xem xét phương thức ReadFileIntoStringCollection[] . Chúng ta sử dụng StreamReader để đọc trong mỗi hàng. Khó khăn chính là cần đếm ký tự đọc để chắc chúng ta không vượt quá khả năng chứa đựng của textbox:

private StringCollection ReadFileIntoStringCollection[]
{
    const int MaxBytes = 65536;
    StreamReader sr = new StreamReader[chooseFile];
    StringCollection result = new StringCollection[];
    int nBytesRead = 0;
    string nextLine;
    while [[nextLine = sr.ReadLine[]] != null]
    {
        nBytesRead += nextLine.Length;
        if [nBytesRead > MaxBytes]
            break;
        result.Add[nextLine];
    }
    sr.Close[];
    return result;
}

–  Đến đây đoạn mã được hoàn thành.

Click vào đầy để download chương trình demo đọc và ghi tập tin ra file txt viết trên visual studio 2010

[Tham khảo Kỹ thuật Lập trình C# 2.0]

Chủ Đề