T GIỚI THIỆUệp tin file là tập hợp các loại thông tin dữ liệu do người dùng tạo ra từ máy tính nhằm giúp người dùng có thể lưu trữ dữ liệu một cách đơn giản và dễ dàng.. Ghi/ đọc file te
Trang 1ĐỀ TÀI: FILES
BÀI TIỂU LUẬN
KHOA CÔNG NGHỆ THÔNG TIN KINH DOANH
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI
HỌC KINH TẾ TPHCM
MÔN HỌC: CƠ SỞ LẬP TRÌNH
Trang 2MỤC LỤC
GIỚI THIỆU 3
I FILE TEXT …….……… 3
1 Khái quát chung về file text……… 3
2 Ghi/ đọc file text……… 3
2.1 Ghi dữ liệu vào file. ……… 3
2.2 Đọc dữ liệu từ file…
……… 4
3 Các vấn đề liên quan 4
4 Một số ví dụ 5
II FILE NHỊ PHÂN
……… 8
1 Khái quát chung về file nhị phân
……… 8
2 Ghi/ đọc file nhị phân
……… 9
2.1 Ghi dữ liệu vào file 9
2.2 Đọc dữ liệu từ file 9
3 Các vấn đề liên quan 11
4 Một số ví dụ 12
TÀI LIỆU KHAM KHẢO 30
Trang 3T GIỚI THIỆU
ệp tin (file) là tập hợp các loại thông tin dữ liệu do người dùng tạo ra từ máy tính nhằm giúp người dùng có thể lưu trữ dữ liệu một cách đơn giản và dễ dàng Định dạng của file rất phong phú và đa dạng như: lưu trữ văn bản (txt, doc, ), hiển thị hình ảnh (jpeg, png, ), Tuy nhiên ở đây ta chỉ tìm hiểu file text và file nhị phân cũng như cách đọc và ghi chúng trong C# File là một class tiện ích, cung cấp các phương thức tĩnh cho việc tạo, copy, xóa, di chuyển và mở một file, và hỗ trợ tạo đối tượng FileStream.
I FILE TEXT
1 Khái quát chung về file text
File text là tài liệu văn bản tiêu chuẩn có chứa văn bản ở dạng plain text Hay nói cách khác file text là các tài liệu văn bản đơn giản nhưng chứa ít hoặc không có định dạng File text là những file thường có đuôi txt.
Trong ngôn ngữ lập trình C#, có 2 thao tác chính có thể thực hiện với file:
Ghi dữ liệu vào file
Đọc dữ liệu từ file
2 Ghi/ đọc file text
Không gian System.IO cung cấp : các lớp cơ bản cho phép người lập trình có thể lấy được thông tin cơ bản về file và thư mục (directory), các lớp hỗ trợ việc đọc và ghi các file và các luồng dữ liệu (stream).
Vì vậy để viết chương trình lưu dữ liệu vào file, ta phải thêm dòng tiêu đề:
using System.IO;
Ngoài ra ta còn sử dụng thêm lệnh using System.Text;
2.1 Ghi dữ liệu vào file
Trang 4a Ghi bằng cú pháp
Trước tiên, ta cần tạo một tệp trong ổ đĩa bất kỳ Sau đó nhập các cú pháp sau:
string filename = "<ổ đĩa>\\<tên tệp>\\<tên _file_text>.txt";
StreamWriter sw = new StreamWriter(filename);
sw.Write("Xin chao"); //viết vào sw
sw.Close(); //đóng sw
b Tạo file text bằng hàm CreatText()
static string file1 = "<ổ đĩa>\\<tên tệp>\\<tên _file_text>.txt";
StreamWriter sw; //khai bái biến file cần ghi
sw = File.CreateText(file1); //tạo file text
sw.WriteLine("Xin chao");
sw.Close();
2.2 Đọc dữ liệu từ file
a Cách 1:
string filename = "<ổ đĩa>\\<tên tệp>\\<tên _file_text>.txt";
StreamReader sr = new StreamReader(filename);
input = sr.ReadToEnd(); //đọc toàn bộ file từ đầu đến cuối
Console.WriteLine(input); //hiển thị dữ liệu sau khi đọc
Lưu ý:
o Sau khi ghi/đọc xong thì cần phải đóng file lại
o Chỉ thị static làm cho một thành phần không thể khởi tạo được, điều đó nghĩa là thành phần tĩnh không thể được khỏi tạo => Nếu chỉ thị static được áp dụng cho 1 lớp thì lớp
đó không thể khởi tạo thể hiện bằng từ khóa new
Trang 53 Các vấn đề liên quan
BinaryReader
file nhị phân
Đọc dữ liệu gốc (primitive data) từ một binary stream
private const string FILE_NAME = "Test.txt";
static void Main(string[] args)
Trang 6
b Ghi các dữ liệu sau đây vào file, đọc và hiển thị chúng:
This is a text
Chao ban
Ma so cua ban la: M520.1314
So thu tu cua ban la: 88
Trang 7c Nhập số điện thoại và phần thưởng Ghi các dữ liệu sau đây vào file, đọc và hiển thị chúng:
This is a text
Chuc mung sdt da trung thuong
vui long lien lac voi chung toi qua so dien thoai 1900.xxx de biet them chi tiet
Thong bao den day la het Cam on quy khach da theo doi.
static string file1 = "C:\\cs1\\testfile.txt";
static void Main(string[] args)
sw.WriteLine("Chuc mung sdt {0} da trung thuong {1}", sdt, thuong);
sw.WriteLine("Vui long lien lac voi chung toi qua so dien thoai 1900.xxx de biet them chi tiet");
Trang 8d Ghi các dữ liệu sau đây vào file, đọc và hiển thị:
This is a text
Xin chao
Toi la robot thong minh
Ma hieu cua toi la: M5201314
Toi van dang cai tien vui long cho them
static char mahieu = 'M';
static string modau = "xin chao";
static void Main(string[] args)
sw.WriteLine("Toi la robot thong minh");
sw.WriteLine("Ma hieu cua toi la: " + mahieu + a);
Trang 9Kết quả:
II FILE NHỊ PHÂN
1 Khái quát chung về file nhị phân
File nhị phân (Binary file) có thể bao gồm dữ liệu nhị phân được lưu trữ bởi máy tính hoặc dữ liệu không nhị phân chuyển đổi hoặc mã hóa thành dữ liệu nhị phân; thường vẫn
tự nhiên và thường trú trong máy tính, nhưng nó có thể được chuyển đổi/ mã hóa để văn bản đơn giản nếu nó cần phải được truyền qua một kết nối mạng/ Internet Tuy nhiên, các phương pháp giải mã tệp nhị phân khác nhau là khác nhau.
Việc đọc/ ghi dữ liệu của file nhị phân có nhiều ưu điểm hơn file text vì bảo mật file cao hơn, tiết kiệm không gian hơn khi lưu trữ (số nhất là số thực), lưu vào tệp nhanh hơn (khi lượng dữ liệu lớn sẽ thể hiện rõ sự chênh lệch tốc độ giữa hai loại) và dữ liệu sẽ chính xác hơn.
2 Ghi/ đọc dữ liệu vào file
2.1 Ghi dữ liệu vào file
a Ghi dữ liệu vào file kiểu byte
byte [] b1 = {1, 2, 3, 4, 255}; // khai báo một biến mảng kiểu byte
FileStream("C:\\testbin.dat", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); \\ khai báo đối tượng để ghi vào file "testbin.dat" ở ổ đĩa C
foreach (byte bnet in b1) //thực hiện quá trình ghi các phần tử của mảng số b1 có kiểu byte
{
sw.WriteByte(bnext);
}
sw.Close(); //đóng file
b Ghi dữ liệu từ file nhị phân
string file1 = "C:\\FileBin1.dat";
FileStream file1;
string name; //dữ liệu thành viên
Trang 10double salary; //dữ liệu thành viên
BinaryWriter wf = new BinaryWriter(file1); //khai báo đối tượng wf cho việc ghi vào file nhị phân
wf.Write(name); //ghi ra thành viên name
wf.Write(salary); //ghi ra thành viên salary
2.2 Đọc dữ liệu từ file
a Đọc dữ liệu từ file kiểu byte
FileInfo fr = new FileInfo("C:\\testbin.dat");
Stream strm = fr.OpenRead(); //mở file
b Đọc dữ liệu từ file nhị phân
FileStream file1; //khai báo file cần đọc
BinaryReader rf = new BinaryReader(file1); //khai báo đối tượng rf cho việc đọc
name = rf.ReadString(); //đọc thành phần name
salary = rf.ReadDouble();
Lưu ý:
o Sau khi ghi/ đọc xong phải đóng file lại
o Tùy thuộc vào kiểu khai báo từng dữ liệu mà ta có các hàm đọc dữ liệu khác nhau
int (-2,147,483,648 to
Trang 11uint (0 to 4,294,967,295) uint ui1; ui1 = rf.ReadUInt32();
long (-9,223,372,036,854,775,808
to 9,223,372,036,854,775,807) long b; b = rf.ReadInt64();
ulong (0 to
18,446,744,073,709,551,615) ulong ul1; ul1 = rf.ReadUInt64();
FileMode kiểu liệt kê (FileMode Enum) xác định các phương thức mở File khác
nhau Các thành viên của (FileMode Enum) là:
Append: mở một File đang tồn tại và đặt con trỏ tại phần cuối của
File Tạo File nếu File đó chưa tồn tại.
Create: tạo một File mới Nếu File đó đã tồn tại thì xóa File cũ và tạo
lại File mới.
CreateNew: chỉ định hệ điều hành tạo một File mới Nếu File đó đã
tồn tại, nó sẽ ném ra một ngoại lệ (Throw IOException).
Open: Nó mở một File đang tồn tại Nếu File không tồn tại, nó sẽ
ném ra một ngoại lệ (Throw FileNotFoundException).
OpenOrCreate: chỉ định hệ điều hành mở một File nếu nó tồn tại.
Nếu File không tồn tại thì tạo một File mới.
Truncate: mở một File đang tồn tại và truncate (cắt) kích cỡ của nó
về 0 byte.
FileAccess FileAccess Enum có các thành viên là:
Read: đọc file
Trang 12 ReadWrite: đọc và ghi vào file
Write: ghi vào file
FileShare FileShare Enum có các thành viên sau:
Inheritable: cho phép một File truyền tính kế thừa tới các tiến trình
con (Win32 không hỗ trợ trực tiếp tính năng này)
None: từ chối việc chia sẻ File hiện tại
Read: cho phép mở File để đọc
ReadWrite: cho phép mở File để đọc và ghi
Write: cho phép mở File để ghi
Delete: cho phép xóa File
private const string FILE_NAME = "Test.txt";
static void Main(string[] args)
FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
Trang 14private string name;
private int age;
private double salary;
Trang 15Console.WriteLine(" MENU ");
Console.WriteLine("==============");
Console.WriteLine("1 Nhap du lieu");
Console.WriteLine("2 Doc va xem");
Filebin p = new Filebin();
string filename = "C:\\cs1\\Data.dat";
Console.WriteLine("Save data to file");
FileStream fwr = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.Write);
Console.WriteLine("Read data from file");
FileStream fr = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
Trang 16e Viết chương trình để lưu vào dữ liệu file
using System;
using System.IO;
class Filebin
{
private string name;
private int age;
private double salary;
Trang 17Filebin[] p = new Filebin[n];
string filename = "C:\\cs1\\Data.dat";
Console.WriteLine("Ghi du lieu vao file");
FileStream fwr = new FileStream(filename, FileMode.Create, FileAccess.Write,
Console.WriteLine("Doc du lieu tu file");
Filebin[] p1 = new Filebin[n];
FileStream fr = new FileStream(filename, FileMode.Open, FileAccess.Read,
Trang 18private long ID;
private int age;
public static int n;
public person[] p = new person[100];
public void Input()
Trang 19Console.Write("You want to delete by ID or name (I/N): ");
string select = Console.ReadLine();
if (select.ToUpper() == "I")
{
Console.Write("Enter ID to delete: ");
long id1 = Int64.Parse(Console.ReadLine());
for (int i = 0; i < n; i++)
Console.Write("Enter name to delete: ");
string name2 = Console.ReadLine();
for (int i = 0; i < n; i++)
Console.Write("You want to edit by ID or name (I/N): ");
string select = Console.ReadLine();
if (select.ToUpper() == "N")
{
Console.Write("Enter name to edit: ");
string name1 = Console.ReadLine();
for (int i = 0; i < n; i++)
Trang 20}
else if (select.ToUpper() == "I")
{
Console.Write("Enter ID to edit: ");
long id2 = Int64.Parse(Console.ReadLine());
for (int i = 0; i < n; i++)
Console.WriteLine("1 Input Data ");
Console.WriteLine("2 List All ");
Trang 21Kết quả:
21
Downloaded by Heo Út (quangutbin@gmail.com)
Trang 22g Viết chương trình để lưu dữ liệu vào file
Trang 23namespace cslt
{
class Phone
{
private ulong _phoneNumber;
private string _fullName;
private string _address;
private int _noOfLine;
private string _type;
private string _organization;
public Phone(ulong _phoneNumber, string _fullName, string _address, int _noOfLine, string _type, string _organization)
get { return _phoneNumber; }
set { _phoneNumber = value; }
}
public string FullName
{
get { return _fullName; }
set { _fullName = value; }
}
public string Address
{
get { return this._address; }
set { _address = value; }
}
public int noOfLine
{
get { return _noOfLine; }
set { _noOfLine = value; }
}
public string Type
{
get { return _type; }
set { _type = value; }
}
public string Organization
{
get { return _organization; }
set { _organization = value; }
Trang 24return (String.Format("Phone: {0} \nName: {1} \nAddress: {2} \nLine: {3} \nType: {4}
\nOrg: {5} \n", _phoneNumber, _fullName, _address, _noOfLine, _type, _organization));
ArrayList data = new ArrayList();
public Phone this[int i]
Trang 25Console.WriteLine("Found phone(s): {0}", found);
for (int k = 0; k < found; ++k)
Trang 26get { return data.Count; }
}
}
class App
{
static int index = -1;
static PhoneBook list = new PhoneBook();
public static int Main()
Trang 27Console.WriteLine("1 Add a Phone");
Console.WriteLine("2 Edit a Phone");
Console.WriteLine("3 Delete a Phone");
Console.WriteLine("4 Search a Phone");
Console.WriteLine("5 Display PhoneBook");
Console.WriteLine("6 Save to file");
Console.WriteLine("7 Load from file");
Console.WriteLine("8 Display Emergency Numbers"); Console.WriteLine("9 Exit");
Console.WriteLine("\nEnter Phone info: ");
Phone phone = new Phone();
Console.Write("Enter Phone Number: ");
ulong tel = UInt64.Parse(Console.ReadLine()); list.Search(tel);
Trang 28static void Edit()
Console.Write("\nEnter file name: ");
string fileName = Console.ReadLine();
if (File.Exists(fileName))
File.Delete(fileName);
FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.Write);
BinaryWriter bw = new BinaryWriter(fs);
for (int i = 0; i < list.Count; ++i)
Console.Write("\nEnter file name: ");
string fileName = Console.ReadLine();
Trang 29Downloaded by Heo Út (quangutbin@gmail.com)
Trang 30TÀI LIỆU KHAM KHẢO
Sách Lập trình C# từ cơ bản đến nâng cao – Phạm Công Ngô
https://docs.microsoft.com/vi-vn/dotnet/api/system.io.filemode?view=netframework-https://docs.microsoft.com/en-us/dotnet/api/system.io.fileaccess?view=net-6.0
https://nguyenvanhieu.vn/doc-ghi-file-trong-c-sharp/
30
Trang 31Downloaded by Heo Út (quangutbin@gmail.com)