-
11-09-2006, 01:09 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Đọc từng byte của file trong lập trình C#?
Tôi có một file lưu ở dạng Unicode 16. Khi mở = EmEditor thì có thể đọc = mắt bình thường, nhưng khi tôi dùng C# để đọc từng dòng (ReadLine) thì nó chỉ đọc được ký tự đầu tiên của dòng đầu tiên thôi, các dòng còn lại đều trả ra blank.Sau hỏi 1 người bạn thì mới biết cứ sau 1 ký tự bình thường thì nó chèn thêm vào 0x00
Xin được hướng dẫn cách đọc nhị phân từng byte một để loại bỏ các ký tự 0x00 đó.
Tôi post lên nội dung file đó :
(mở trong EmEditor)
BEGIN:VMSG
VERSION:1.1
X-IRMC-STATUS:READ
X-IRMC-BOX:INBOX
BEGIN:VCARD
VERSION:2.1
N:
TEL:+84913568756
END:VCARD
BEGIN:VENV
BEGIN:VCARD
VERSION:2.1
N:
TEL:
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:7/31/2006 10:20:57 PM
ve roi ha,ko mat tay,chan, vay co mat con mat nao ko?haha,ngu ngon nha.
END:VBODY
END:VENV
END:VENV
END:VMSG
B E G I N : V M S G
V E R S I O N : 1 . 1
X - I R M C - S T A T U S : R E A D
X - I R M C - B O X : I N B O X
B E G I N : V C A R D
V E R S I O N : 2 . 1
N :
T E L : + 8 4 9 1 3 5 6 8 7 5 6
E N D : V C A R D
B E G I N : V E N V
B E G I N : V C A R D
V E R S I O N : 2 . 1
N :
T E L :
E N D : V C A R D
B E G I N : V E N V
B E G I N : V B O D Y
D a t e : 7 / 3 1 / 2 0 0 6 1 0 : 2 0 : 5 7 P M
v e r o i h a , k o m a t t a y , c h a n , v a y c o m a t c o n m a t n a o k o ? h a h a , n g u n g o n n h a .
E N D : V B O D Y
E N D : V E N V
E N D : V E N V
E N D : V M S G
View more random threads:
- Hướng dẫn AddTab con (động) vào XtraTabControl trong DevExpress
- Hướng dẫn làm một Form cập nhật dữ liệu tối ưu
- Chỗ Nào Cài Phần Mềm Autodesk 3ds Max Tận Nhà Quận 2 Uy Tín
- Cách nào để tạo Crystal report từ 2-3 table trong database và filter by parameter ?
- Sử dụng biến Nullable trong lập trình C#
- Video hướng dẫn sử SMS Gateway và lập trình tương tác
- Tuyển 5 Drupal Deverloper làm dự án trong 6 tháng (Lương từ 900$ đến 1200$)
- Làm ẩn cửa sổ ứng dụng Console trong lập trình C#
- học WIX ( Windows Installer XML )
- Hướng dẫn cách SlipStream VS2008 SP1
-
02-10-2006, 08:47 AM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
bạn phải tạo encoding thì phải. Tui dùng filestream và BinaryReader để đọc file. Hiện, máy tui 0 có msdn cũng như c# nên 0 nói cụ thể được. Bạn có thể tìm như tui nói là có thông tin thôi !
-
05-10-2006, 02:43 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Bạn xem thử mấy dòng code sau đây:
Mã:FileStream myFStream = new FileStream("myFile.txt", ileMode.OpenOrCreate,FileAccess.ReadWrite); myFStream.Position = 0 ; //cho đọc từ byte thứ nhất for (int i=0; i<256; i++) { // đọc từng byte xuất ra Console Console.Write(myFStream.ReadByte()); } myFStream.Close();
-
06-10-2006, 12:07 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Tôi không rành về C# lắm. Nhưng qua cách mô tả của bạn về vấn đề đó thì có vẻ như bạn đã dịch và chạy chương trình trong chế độ ASSCII, như vậy hàm phương thức ReadLine sẽ hiểu là bạn muốn đọc một dòng ở chế độ ASCII (dĩ nhiên 0x00 là mã kết thúc xâu). Bạn thử dịch và chạy ở chế độ UNICODE xem (mà tôi tưởng là default là UNICODE - bạn có thể xem ở các pre processor).
Gút lắc!
-
06-10-2006, 05:35 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi Tarzan
-
08-10-2006, 06:17 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cậu dùng 1 hex editor, xem đầu file text của cậu có 2 byte FF FE hay FE FF không. Đây là 2 byte đánh dấu file UNICODE, còn gọi là BOM.
Tui đã tạo thử 2 file UNICODE 16, 1 có BOM (1) và 1 không có BOM (2). Dùng chính VS 2005 để file (1) thì mở OK, hiển thị đúng, nhưng mở file (2) thì không mở được.
Tui code thử 1 .NET console app, viết bằng C++/CLI, dùng StreamReader. Với file (1) thì mở, ReadLine và WriteLine OK, hiện ra đúng, nhưng với file (2) thì không hiển thị đúng.
Tui đang tìm hiểu tại sao và cách khắc phục. Tui đang code tổng quát, nghĩa là đọc và hiển thị được các loại file text: ASCII, UTF, UNICODE (có BOM và không BOM).
Code sau tạm chạy được, nhưng code bug nhiều.
Mã:// PrintText.cpp : main cpp source file// Read an ASCII/Unicode text file and print to console// Compile with VS 2005, C++/CLI source, /clr compile option #include "stdafx.h" using namespace System;using namespace System::IO;using namespace System::Text; int main(array<System::String ^> ^args){ if (0 == args->Length) { Console::WriteLine("Please specify a text file."); return -1; } String^ fileName = args[0]; if (false == File::Exists(fileName)) { Console::WriteLine("File {0} not found", fileName); return -1; } try { // Get static ASCII encoding. Encoding^ ascii = Encoding::ASCII; // Open the text file StreamReader^ sr = gcnew StreamReader(fileName, Encoding::ASCII, true); String^ str = sr->ReadToEnd(); // Convert the string into a byte[]. array<Byte>^ rawBytes = ascii->GetBytes(str); if (0 != rawBytes[0]) { array<Byte>^ asciiBytes = gcnew array<Byte>(rawBytes->Length); for (int i = 0, j = 0; i < rawBytes->Length; i++) { if (0 != rawBytes[i]) { asciiBytes[j] = rawBytes[i]; j++; } } String^ lines = ascii->GetString(asciiBytes); Console::WriteLine("{0}", lines); } // Close the file. sr->Close(); } catch (Exception^ e) { Console::WriteLine("Problem reading file '{0}'. {1}", fileName, e->Message); } Console::ReadKey(true); return 0;}
Có gì sơ sót mong các bạn góp ý.
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...