Đọc ghi file trong C# – Trong mỗi một ngôn ngữ lập trình, việc đọc ghi file là một điều cực kì quan trọng. Vậy nên, trong bài viết này Lập trình không khó sẽ hướng dẫn bạn cách để thao tác với file, đọc ghi file trong ngôn ngữ lập trình C#.
Tại sao chúng ta đọc ghi file
- Các dữ liệu sẽ được lưu ở biến của chương trình, và nó sẽ biến mất ngay sau khi chương trình kết thúc. Sử dụng file để lưu trữ dữ liệu cần thiết, để đảm bảo dữ liệu của chúng ta không bị mất ngay cả khi chương trình ngừng chạy.
- File có thể được dùng làm file input nếu dữ liệu đầu vào của chương trình quá lớn mà không thể nhập bằng tay, và chương trình của bạn có thể đọc file mỗi lần khi chạy.
- Dễ dàng sao chép di chuyển qua lại giữa các thiết bị với nhau.
Các kiểu file
Trong giới hạn bài viết này chúng ta sẽ chỉ tìm hiểu về file văn bản (text files) là những file thường có đuôi .txt
. Loại file này có thể dễ dàng được tạo bởi các trình soạn thảo (text editor) khác nhau như: Notepad, Sublime Text, Visual Studio Code, Nodepad++ ….
Các thao tác với file
Trong ngôn ngữ lập trình C#, có một số thao tác chính với file như sau:
- Đọc thông tin từ file (nếu file đã tồn tại).
- Ghi thông tin vào file (nếu file chưa tồn tại thì sẽ tự động tạo file mới).
Thao tác đọc ghi file trong C#
Làm việc với file trong C# (đọc ghi file trong C#) đã được class File có sẵn của C# hỗ trợ. Qua đó việc thao tác đọc ghi file trong C# là một điều cực kì dễ dàng.
Để có thể sử dụng được class File trong C# đã cần phải khai báo thêm thư viện System.IO
như sau:
using System.IO;
Thao tác đọc file trong C#
Để đọc được dữ liệu từ một file bằng C#. Chúng ta sử dụng các phương thức như ReadAllText
và ReadAllLines
sẽ được trình bày ngay sau đây.
Ở đây, mình đã chuẩn bị 1 file là test.txt
có nội dung như sau:
Day la dong thu 1 trong file test.txt Day la dong thu 2 trong file test.txt Day la dong thu 3 trong file test.txt
Phương thức ReadAllText
Để đọc được nội dung trong file test.txt
ta sử dụng phương thức ReadAllText
phương thức này sẽ trả về một giá trị kiểu string
là nội dung của file, sau đây là chương trình:
using System; using System.IO; using System.Text; namespace luyencodec_ { class Program { static void Main(string[] args) { Console.WriteLine("Noi dung trong file: "); string a = File.ReadAllText("test.txt"); Console.WriteLine(a); Console.ReadKey(); // stop screen } } }
Sau khi chạy chương trình trên màn hình sẽ hiện ra kết quả:
Noi dung trong file: Day la dong thu 1 trong file test.txt Day la dong thu 2 trong file test.txt Day la dong thu 3 trong file test.txt
Như các bạn có thể thấy, phương thức ReadAllText
sẽ đọc tất cả các dòng trong file test.txt
và in ra cùng một lúc. Nhưng giờ chúng ta muốn đọc từng dòng trong file đó để biết được dòng đó có chưa những dữ liệu thì gì phải làm sao ? Vì vậy, chúng ta phải dùng đến phương thức ReadAllLines
sẽ được trình bày ở phần sau của bài viết.
Phương thức ReadAllLines
Để đọc được dữ liệu từng dòng trong file test.txt
ta sử dụng phương thức ReadAllLines
, phương thức này trả về cho chúng ta giá trị kiểu string[]
(mảng kiểu string). Từ đó, ta có thể dễ dàng truy xuất từng dòng của dữ liệu:
using System; using System.IO; using System.Text; namespace luyencodec_ { class Program { static void Main(string[] args) { Console.WriteLine("Noi dung trong file: "); string[] a = File.ReadAllLines("test.txt"); for (int i = 0; i < a.Length; ++i) { Console.Write(i + ". "); Console.WriteLine(a[i]); } Console.ReadKey(); // stop screen } } }
Sau đây là kết quả của chương trình trên:
Noi dung trong file: 0. Day la dong thu 1 trong file test.txt 1. Day la dong thu 2 trong file test.txt 2. Day la dong thu 3 trong file test.txt
Ta có thể thấy trên chương trình, giá trị trả về của File.ReadAllLines
được lưu lại trong biến a
như vậy chúng ta có thể dễ dàng truy xuất thông qua chỉ số như một mảng bình thường.
Thao tác ghi file trong C#
Như vậy, chúng ta đã tìm hiểu xong cách để đọc dữ liệu từ một file. Nhưng chỉ đọc thôi là chưa đủ, chúng ta cần phải biết cách ghi dữ liệu vào file, và đó là lúc chúng ta cần tới 2 phương thức WriteAllText
và WriteAllLines
.
Phương thức WriteAllText
Phương thức này cho phép chúng ta viết tất cả dữ liệu từ một biến kiểu string
vào trong file. Ví dụ ở đây chúng ta sẽ ghi dữ liệu vào file out.txt
:
using System; using System.IO; using System.Text; namespace luyencodec_ { class Program { static void Main(string[] args) { string noidung = "Ghi file C# khong kho"; File.WriteAllText("out.txt", noidung); string a = File.ReadAllText("out.txt"); Console.WriteLine(a); Console.ReadKey(); // stop screen } } }
Ở chương trình trên, vì file out.txt
không tồn tại, nên chương tình sẽ tạo mới cho chúng ta file đó và ghi vào đó dòng "Ghi file C# khong kho"
. Tiếp theo đó, ta sử dụng kiến thức đọc dữ liệu từ file ở phần trước của bài để in ra dữ liệu có trong file. Sau đây là output của chương trình:
Ghi file C# khong kho
Sau khi đọc file và đưa ra kết quả chúng ta có thể thấy việc ghi file diễn ra thành công.
Phương thức WriteAllLines
Tương tự như phương thức WriteAllText
WriteAllLines
sẽ ghi dữ liệu vào file thông qua một giá trị kiểu string[]
(mảng kiểu string), với mỗi một phần tử trong giá trị đó tương ứng với một dòng sẽ được viết vào trong file:
using System; using System.IO; using System.Text; namespace luyencodec_ { class Program { static void Main(string[] args) { string[] noidung = {"Ghi file C# khong kho", "Ghi tung dong vao file cung de khong kem"}; File.WriteAllLines("out.txt", noidung); string a = File.ReadAllText("out.txt"); Console.WriteLine(a); Console.ReadKey(); // stop screen } } }
Trên chương trình biến noidung
là một biến mảng kiểu string khi sử dụng phương thức WriteAllLines
để ghi vào file sẽ cho ra kết quả như sau:
Ghi file C# khong kho Ghi tung dong vao file cung de khong kem
Và như vậy, việc ghi vào file diễn ra thành công.
Phương thức AppendAllText và AppendAllLines
Như chúng ta đã biết ở phần trước của bài để ghi dữ liệu vào một file văn bản thì chúng ta sử dụng 2 phương thức đó là WriteAllText
và WriteAllLines
nhưng hai phương thức này có một nhược điểm là khi thực hiện ghi dữ liệu vào file thì chương trình sẽ xóa toàn bộ các dữ liệu cũ có trong file và ghi lại vào file một dữ liệu mới, điều này sẽ làm mất đi các dữ liệu ghi trước đó. Vì lẽ đó, AppendAllText
và AppendAllLines
ra đời.
Hai phương thức này sử dụng y hệt so với WriteAllText
và WriteAllLines
chỉ có một chút khác biệt là khi thực hiện ghi dữ liệu vào file, 2 phương thức này sẽ thực hiện ghi tiếp dữ liệu vào cuối file mà không phải là ghi hoàn toàn dữ liệu mới. Sử dụng hai phương thức này rất đơn giản như sau:
File.AppendAllText(<tên file>, <dữ liệu ghi vào>);
và
File.AppendAllLines(<tên file>, <mảng dữ liệu ghi vào>);
Lưu ý: <dữ liệu ghi vào>
sẽ là một giá trị kiểu string
còn <mảng dữ liệu ghi vào>
sẽ là một giá trị kiểu string[]
(mảng kiểu string).
Tổng kết
Sau đây mình sẽ tổng hợp lại thành một bảng ngăn gọn để các bạn có thể dễ hình dung hơn về các phương thức trên.
Sử dụng | Giá trị trả về | Chức năng | |
ReadAllText | File.ReadAllText(<tên file>) | string | Đọc tất cả dữ liệu trong file |
ReadAllLines | File.ReadAllLines(<tên file>) | string[] | Đọc từng dòng trong file |
WriteAllText | File.WriteAllText(<tên file>, <dữ liệu ghi vào>) | Không có | Xóa tất cả dữ liệu cũ rồi ghi tất cả dữ liệu vào trong file |
WriteAllLines | File.WriteAllLines(<tên file>, <dữ liệu ghi vào>) | Không có | Xóa tất cả dữ liệu cũ rồi ghi từng dòng vào trong file với mỗi dòng là mỗi phần tử của dữ liệu |
AppendAllText | File.AppendAllText(<tên file>, <dữ liệu ghi vào>) | Không có | Thêm vào cuối file dữ liệu ghi vào |
AppendAllLines | File.AppendAllLines(<tên file>, <dữ liệu ghi vào>) | Không có | Thêm từng dòng vào cuối file với mỗi dòng là mỗi phần tử của dữ liệu ghi vào |
Như vậy là thông qua bài viết này, các bạn đã có thể nắm bắt được cơ bản các cách để đọc ghi file trong C# như : đọc, ghi, ghi vào cuối file. Cảm ơn bạn đã đọc bài ! Chúc bạn một ngày tốt lành !
Để lại một bình luận