Streamreader trong C# là gì 2022

Thủ Thuật Hướng dẫn Streamreader trong C# là gì Mới Nhất


Bann đang tìm kiếm từ khóa Streamreader trong C# là gì 2022-04-03 21:08:04 san sẻ Bí kíp về trong nội dung bài viết một cách 2022.







FileStream là một loại stream đặc biệt quan trọng chuyên vốn để làm đọc ghi tài liệu với file. Đây là những khái niệm tương đối mới và khá đặc trưng của C# và .NET. Bài học này sẽ tương hỗ cho bạn nắm được kỹ thuật đọc ghi file với FileStream và cách thao tác với file/thư mục trong C#.




  • Làm việc với file và thư mục

  • Lớp Directory

  • Đọc/ghi tài liệu với file trong C#, FileStream

  • Khởi tạo FileStream

  • Ghi vào file qua FileStream

  • Đọc từ file qua FileStream

  • Các yếu tố tương quan đến FileStream trong C#

  • Một số phương thức “tắt”

  • Sử dụng using block

  • Kết luận

  • Video tương quan


Làm việc với file và thư mục


Trước hết toàn bộ chúng ta sẽ học cách sử dụng dụng những lớp .NET tương hỗ thao tác với khối mạng lưới hệ thống file của windows.


Tất cả những lớp để thao tác với file trong .NET nằm trong không khí tên System.IO. Ba class chính để thao tác với khối mạng lưới hệ thống file là Directory (thao tác với thư mục), File (thao tác với file), Path (thao tác với đường dẫn).


Lớp Directory


Lớp Directory chứa hầu hết những phương thức tĩnh giúp thao tác với file và thư mục. Dưới đấy là một số trong những phương thức của lớp này giúp kiểm tra đường dẫn và giúp lấy list file trong một thư mục.


Phương thức tĩnh GetFiles: tìm toàn bộ những file trong thư mục có phần mở rộng theo yêu cầu. Ví dụ tại đây tìm toàn bộ những file exe trong thư mục E:Catalogue:


Directory.GetFiles(@”E:CATALOGUE”, “*.exe”, SearchOption.AllDirectories)

string[149] { “E:\CATALOGUE\Client PWI\uninstall.exe”, “E:\CATALOGUE\Client PWI\element\360inst_wanmeigj.exe”, “E:\CATALOGUE\Client PWI\element\dxwebsetup.exe”, “E:\CATALOGUE\Client PWI\element\elementclient.exe”, “E:\CATALOGUE\Client PWI\element\gt_setup.exe”, “E:\CATALOGUE\Client PWI\element\gt_updater.exe”, “E:\CATALOGUE\Client PWI\element\unitywebplayerdevelopment.exe”, “E:\CATALOGUE\Client PWI\element\reportbugs\creportbugs.exe”, “E:\CATALOGUE\Client PWI\element\reportbugs\pwprotector.exe”, “E:\CATALOGUE\Client PWI\element\Shaders\vs\vsa.exe”, “E:\CATALOGUE\Client PWI\element\Shaders\vs\facerender\vsa.exe”, “E:\CATALOGUE\Client PWI\element\Shaders\vs\normalmap\vsa.exe”, “E:\CATALOGUE\Client PWI\launcher\Launcher.exe”, “E:\CATALOGUE\Client PWI\patcher\patcher.exe”, “E:\CATALOGUE\Development Tools\Database\SQLEXPR_x64_ENU.exe”, “E:\CATALOGUE\Development Tools\Database\SSMS-Setup-ENU.exe”, “E:\CATALOGUE\Development Tools\Database\S…

>


Phương thức này sử dụng ba tham số:


  1. đường dẫn tới thư mục;

  2. mẫu tìm kiếm: mẫu văn bản mà phương thức GetFiles sử dụng trong quy trình tìm kiếm. GetFiles chỉ trả lại những file mà tên phù thích phù hợp với mẫu văn bản của tham số này.

  3. phạm vi tìm kiếm: xác lập xem phương thức GetFiles chỉ tìm trong thư mục được chỉ định (TopDirectoryOnly) hay tìm cả trong những thư mục con của nó (AllDirectories).

Kết quả tiến hành của phương thức này là một mảng string chứa tên khá đầy đủ (gồm có cả đường dẫn) của những file tìm thấy.


Tương thự, phương thức GetDirectories trả về list toàn bộ những thư mục con trong một thư mục.


Phương thức tĩnh Exists : kiểm tra xem một đường dẫn tới thư mục có tồn tại hoặc đúng chuẩn không.


> Directory.Exists(@”C:Program Files”)

true

>


Phương thức CreateDirectory: tạo thư mục mới.


Phương thức Delete: xóa thư mục.


Bạn trọn vẹn có thể thuận tiện và đơn thuần và giản dị tìm hiểu được cách sử dụng của những phương thức còn sót lại của lớp này.


Lớp Path


Lớp Path cũng chứa hầu hết những phương thức tĩnh giúp phân tích đường dẫn tới file hoặc thư mục. Dưới đấy là cách sử dụng một phương thức của lớp này:




Phương thức GetDirectoryName trả lại phần tên thư mục trong đường dẫn tới file.


Phương thức GetFileName trích ra phần tên file trong một đường dẫn tới file, bỏ phần đường dẫn thư mục.


Phương thức GetFileNameWithoutExtension trích ra phần tên của file, bỏ phần đường dẫn và phần mở rộng.


Phương thức GetExtension trả về phần mở rộng của tên file hoặc thư mục.


Các phương thức của lớp Path đều tương đối dễ sử dụng. Bạn đọc trọn vẹn có thể tự mình tìm hiểu những phương thức khác.


Đọc/ghi tài liệu với file trong C#, FileStream


Ở phần trước toàn bộ chúng ta đã xem xét tổng thể về stream trong .NET framework. Trong phần này toàn bộ chúng ta sẽ thao tác với một loại luồng backing store rõ ràng trong C#: FileStream.


Khởi tạo FileStream


Trong C# bạn cũng trọn vẹn có thể khởi tạo FileStream theo nhiều cách thức rất khác nhau:


// sử dụng hàm tạo của lớp FileStream

FileStream fs = new FileStream(“data1.bin”, FileMode.Create);


// sử dụng những phương thức tĩnh của lớp File

FileStream fs1 = File.OpenRead(“data1.bin”); // Read-only

FileStream fs2 = File.OpenWrite(“data2.bin”); // Write-only

FileStream fs3 = File.Create(“data3.bin”); // Read/write


Tất cả những cách trên có điểm chung là cần phải phục vụ nhu yếu một đường dẫn tới file.


Cách thứ nhất là linh hoạt nhất, được cho phép lựa chọn quyết sách thao tác với file, FileMode. Ba phương pháp còn sót lại đều là những “lối tắt” giúp đơn thuần và giản dị hóa việc mở file. Thực chất, chúng tương tự với một số trong những quyết sách của FileMode ở phương pháp thứ nhất.


Sau khi khởi tạo trọn vẹn có thể khởi đầu đọc/ghi tài liệu với file. Tuy nhiên, hiện tại bạn chỉ có đọc và xử lý những byte thô trực tiếp từ FileStream. Để trọn vẹn có thể xử lý trong chương trình, bạn phải tự mình biến hóa những byte đó về kiểu tài liệu mà chương trình cần đến.


Ghi vào file qua FileStream


Hãy xem ví dụ sau:


int i = 1234;

string str = “Hello world”;

fs.Write(BitConverter.GetBytes(i), 0, 4);

fs.Write(Encoding.UTF8.GetBytes(str), 0, Encoding.UTF8.GetByteCount(str));

fs.Flush();

fs.Close();


Trong ví dụ này, bạn ghi vào file một số trong những nguyên i có mức giá trị 1234 và một chuỗi có mức giá trị “Hello world”.


Như bạn đã biết từ bài học kinh nghiệm tay nghề về stream, những luồng backing store trọn vẹn thao tác với byte hoặc mảng byte. Chúng không biết về những loại giá trị cấp cao như int, string, bool hay những object. Do đó bạn phải biến hóa toàn bộ những giá trị về mảng byte.




Đối với những kiểu tài liệu cơ sở (int, bool, char, v.v.), .NET framework phục vụ nhu yếu lớp BitConverter để biến hóa về mảng byte và ngược lại. Đối với tài liệu văn bản cần sử dụng lớp Encoding.


Kiểu byte chỉ sử dụng 1 byte để màn biểu diễn, do đó màn biểu diễn ở dạng mảng byte của giá trị thuộc kiểu byte là một mảng có một phần từ và chứa giá chuẩn trị đó.


  • Quá trình biến hóa một giá trị sang mảng byte phức tạp hơn so với những kiểu tài liệu kích thước lớn:

  • Đối với kiểu int (sử dụng 4 byte để màn biểu diễn 1 giá trị), mảng byte này chứa 4 thành phần (bất kể số nguyên đó có mức giá trị bao nhiêu). Đối với kiểu long (sử dụng 8 byte), mảng byte phải chứa 8 thành phần.

Đến đây phát sinh yếu tố: trật tự của những thành phần trong mảng, gọi là endianness. Có hai Xu thế rất khác nhau để viết thứ tự những byte trong mảng:
(1) Lối viết big-endian (sử dụng trong Mac và Linux): byte bên trái có mức giá trị hơn, giống cách toàn bộ chúng ta đọc số;
(2) Lối viết little-endian (sử dụng trong Windows): byte bên phải có mức giá trị hơn, ngược lại cách toàn bộ chúng ta đọc số.


Phương thức Write của FileStream thực thi phương thức abstract tương ứng của lớp Stream được cho phép ghi một mảng byte vào luồng. Phương thức này chỉ ghi <count> byte khởi đầu từ vị trí <offset>, trong số đó offset và count lần lượt là tham số thứ hai và thứ 3 của phương thức này.


Trong ví dụ trên, phương thức GetByte của BitConverter chuyển biến i thành một mảng 4 byte (do int là kiểu tài liệu màn biểu diễn bằng 4 byte). Mảng này được ghi trọn vẹn vào file, do đó offset = 0, count = 4.


Đối với kiểu string, màn biểu diễn dạng mảng byte của nó tùy từng cách mã hóa ký tự (encoding). Nếu dùng mã ASCII, mỗi ký tự là một trong những byte nhưng nếu dùng mã hóa nhiều byte như Unicode, số byte cho từng ký tự trọn vẹn có thể rất khác nhau. Vì vậy, .NET phục vụ nhu yếu lớp Encoding để tiến hành quy đổi này.


Mỗi stream thường phục vụ nhu yếu một bộ nhớ đệm để tương hỗ đọc ghi tài liệu. FileStream cũng thế. Khi ghi, tài liệu được lưu tạm ở bộ nhớ đệm trước lúc thực sự ghi vào file. Nếu muốn tài liệu được đẩy ngay vào file trọn vẹn có thể gọi phương thức Flush.


Trong suốt quy trình thao tác, file sẽ bị khóa và object khác không thể thao tác với file này. Vì vậy, sau khoản thời hạn kết thúc thao tác với file nên gọi phương thức Close để đóng luồng và giải phóng file.


Đọc từ file qua FileStream


Hãy cùng xem ví dụ sau:


var fs = new FileStream(“data1.bin”, FileMode.OpenOrCreate, FileAccess.Read);

var buffer = new byte[4];

fs.Read(buffer, 0, 4);

int i = BitConverter.ToInt32(buffer, 0);

Console.WriteLine($”i = i”);

int length = (int)fs.Length – 4;

buffer = new byte[length];

fs.Read(buffer, 0, length);

string str = Encoding.UTF8.GetString(buffer);

fs.Close();

Console.WriteLine($”str = str”);


Trong ví dụ này, toàn bộ chúng ta mở lại file đã tạo lúc trước và đọc những giá trị lưu ở trong số đó, gồm có một số trong những nguyên và một chuỗi ký tự.


Để đọc ra một giá trị, toàn bộ chúng ta phải tạo ra một mảng đệm trước để luồng file đưa giá trị vào. Mảng đệm này phải có kích thước bằng hoặc to nhiều hơn tài liệu được đọc ra.


Với kiểu int, kích thước là cố định và thắt chặt (4 byte); với kiểu string, do kích thước không cố định và thắt chặt nên ta phải tính toán ra kích thước của nó (bằng tổng số byte trong file trừ đi số byte mà biến int chiếm).


Sau khi đọc được tài liệu vào mảng đệm, toàn bộ chúng ta sử dụng những phương thức tương ứng của BitConverter và Encoding để quy đổi về kiểu tài liệu thiết yếu.




Các yếu tố tương quan đến FileStream trong C#


Như ở trên toàn bộ chúng ta thấy, việc đọc ghi trực tiếp với FileStream trong C# rất rắc rối, đặc biệt quan trọng khi cần ghi/đọc những object phức tạp. Để xử lý và xử lý một phần yếu tố này, bạn cũng trọn vẹn có thể sử dụng những lớp stream adapter.


Stream adapter đóng vai trò tương hỗ sử dụng luồng backing store bằng phương pháp che đi những phương thức thao tác trực tiếp với byte và phục vụ nhu yếu thêm những phương thức để xử lý tài liệu cấp cao. Tùy thuộc vào kiểu tài liệu cần thao tác toàn bộ chúng ta lựa chọn những loại adapter rất khác nhau.


Hãy cùng xem ví dụ sau:


FileStream fs = new FileStream(“data1.bin”, FileMode.Create, FileAccess.ReadWrite);

BinaryWriter bWriter = new BinaryWriter(fs);

bWriter.Write(1234);

StreamWriter sWriter = new StreamWriter(fs);

sWriter.Write(“Hello world”);

sWriter.Flush();

fs.Close();


fs = new FileStream(“data1.bin”, FileMode.OpenOrCreate, FileAccess.Read);

BinaryReader bReader = new BinaryReader(fs);

var i = bReader.ReadInt32();

StreamReader sReader = new StreamReader(fs);

var str = sReader.ReadToEnd();

Console.WriteLine($”i = i”);

Console.WriteLine($”str = str”);

fs.Close();


Trong ví dụ này toàn bộ chúng ta sử dụng hai loại adapter: BinaryWriter/BinaryReader để thao tác với những kiểu cơ sở (trừ kiểu string); StreamWriter/StreamReader để thao tác với tài liệu văn bản.


Khi sử dụng hai loại adapter này, việc đọc/ghi tài liệu với FileStream được đơn thuần và giản dị hóa thật nhiều vì những adapter đã đứng ra phụ trách biến hóa tài liệu trong quy trình đọc/ghi. Các phương thức của hai loại adapter này cũng rất giống với phương pháp đọc/ghi tài liệu từ giao diện console mà bạn đã quen thuộc.


Một số phương thức “tắt”


Ngoài việc sử dụng những phương pháp “chính thống” như ở trên đã xem xét, lớp File cũng phục vụ nhu yếu cho toàn bộ chúng ta nhiều phương thức “tắt” để đơn thuần và giản dị hóa việc ghi/đọc tài liệu với file:


  • File.WriteAllText,

  • File.ReadAllText,

  • File.WriteAllBytes,

  • File.ReadAllBytes,

  • File.WriteAllLines,

  • File.ReadAllLines,

  • File.OpenRead,

  • File.OpenWrite,

  • File.Create.

Các phương thức này tuy rằng tiện lợi nhưng trọn vẹn có thể làm mất đi một phần tính hiệu suất cao của FileStream. Ví dụ, những lệnh đọc tắt này đọc toàn bộ tài liệu vào bộ nhớ, vốn rất không hiệu suất cao nếu file lớn.


Sử dụng using block


Trong những ví dụ trên, sau khoản thời hạn kết thúc thao tác với file, toàn bộ chúng ta phải tự mình gọi lệnh đóng luồng file. Đây là một thao tác rất hay bị bỏ quên.


Trong những trường hợp khác, toàn bộ chúng ta chỉ việc sử dụng object trong một khối code nhất định, tiếp sau đó object bị hủy bỏ hoặc không tiếp tục sử dụng nữa. Để giải phóng người lập trình khỏi việc phải tự mình hủy bỏ những object như vậy, C# phục vụ nhu yếu một cấu trúc mới: using block. Hãy cùng xem ví dụ sau:


using (FileStream fs = new FileStream(“data1.bin”, FileMode.Create, FileAccess.ReadWrite))


BinaryWriter bWriter = new BinaryWriter(fs);

bWriter.Write(1234);

StreamWriter sWriter = new StreamWriter(fs);

sWriter.Write(“Hello world”);

sWriter.Flush();


using (var fs = new FileStream(“data1.bin”, FileMode.OpenOrCreate, FileAccess.Read))


BinaryReader bReader = new BinaryReader(fs);

var i = bReader.ReadInt32();

StreamReader sReader = new StreamReader(fs);

var str = sReader.ReadToEnd();

Console.WriteLine($”i = i”);

Console.WriteLine($”str = str”);


Ở hai đoạn code này toàn bộ chúng ta không cần tự mình đóng luồng nữa. Biến fs được tạo ra trong cấu trúc using và được cấu trúc này theo dõi. Khi kết thúc khối code, biến fs sẽ tự bị hủy bỏ. Cấu trúc này rất thường xuyên được sử dụng khi thao tác với luồng.


Khi sử dụng những phương thức “tắt” như File.WriteAllText, File.ReadAllText, File.WriteAllBytes, File.ReadAllBytes, File.WriteAllLines, File.ReadAllLines, file được mở và đóng tự động hóa. Chúng ta không cần tự mình tiến hành những thao tác thao tác với file thường thì nữa. Vì vậy những phương thức này được gọi là những phương thức tắt.


Kết luận


Bài học này đã hỗ trợ cho bạn biết phương pháp thao tác với loại stream thứ nhất là FileStream giúp đọc ghi tài liệu với file. Bạn cũng học được cách thao tác với khối mạng lưới hệ thống file của windows từ chương trình C#.


+ Nếu bạn thấy site hữu ích, trước lúc rời đi hãy giúp sức site bằng một hành vi nhỏ để site trọn vẹn có thể tăng trưởng và phục vụ bạn tốt hơn.
+ Nếu bạn thấy nội dung bài viết hữu ích, hãy giúp san sẻ tới mọi người.
+ Nếu có vướng mắc hoặc cần trao đổi thêm, mời bạn viết trong phần thảo luận cuối trang.
Cảm ơn bạn!




Video tương quan








Chia sẻ




Review Streamreader trong C# là gì ?


Một số hướng dẫn một cách rõ ràng hơn về đoạn Clip Streamreader trong C# là gì tiên tiến và phát triển nhất .


Chia Sẻ Link Cập nhật Streamreader trong C# là gì miễn phí


Bạn đang tìm một số trong những Share Link Cập nhật Streamreader trong C# là gì Free.

#Streamreader #trong #là #gì

Đăng nhận xét

Mới hơn Cũ hơn