Tôi đang cố gắng phân biệt giữa tệp "tệp văn bản" và "nhị phân", vì tôi thực sự muốn bỏ qua các tệp có nội dung "không đọc được".byte tệp gốc từ StreamReader, phát hiện số ảo
Tôi có một tệp mà tôi tin là một kho lưu trữ GZIP. Tôi đang tring để bỏ qua các loại tập tin bằng cách phát hiện các chữ số ma thuật/chữ ký tập tin. Nếu tôi mở tệp bằng trình chỉnh sửa Hex plugin trong Notepad ++, tôi có thể thấy ba mã hex đầu tiên là 1f 8b 08
.
Tuy nhiên, nếu tôi đọc các tập tin bằng cách sử dụng StreamReader
, tôi không chắc chắn làm thế nào để có được các byte gốc ..
using (var streamReader = new StreamReader(@"C:\file"))
{
char[] buffer = new char[10];
streamReader.Read(buffer, 0, 10);
var s = new String(buffer);
byte[] bytes = new byte[6];
System.Buffer.BlockCopy(s.ToCharArray(), 0, bytes, 0, 6);
var hex = BitConverter.ToString(bytes);
var otherhex = BitConverter.ToString(System.Text.Encoding.UTF8.GetBytes(s.ToCharArray()));
}
Vào cuối báo cáo kết quả sử dụng Tôi có giá trị biến sau:
hex: "1F-00-FD-FF-08-00"
otherhex: "1F-EF-BF-BD-08-00-EF-BF-BD-EF-BF-BD-0A-51-02-03"
Không bắt đầu bằng giá trị hex nào trong Notepad ++.
Có thể nhận các byte gốc từ kết quả đọc tệp qua StreamReader
không?
chỉ kiểm tra các byte trong byte mảng, bạn không cần tất cả các công cụ chuỗi –
Vấn đề là (mặc dù ví dụ trên) Tôi thực sự ly bắt đầu với một chuỗi (mà tôi biết được sản xuất bởi một StreamReader) và tôi đã hy vọng không phải thay đổi cách chuỗi được cung cấp. [Câu trả lời này] (http://stackoverflow.com/a/10380166/62072) dường như chỉ ra rằng nó có thể nhận được các byte gốc từ một chuỗi .. Tôi đang thiếu gì? –
1F mà bạn thấy trong trình đọc hex của bạn là 31 được chuyển đổi thành 49 (x31) ('1') và 70 (x46) 'F' Char (x1f) là ascii char của Hoa Kỳ (dấu tách đơn vị) không thể in như esc hoặc chuông. vì vậy nếu bạn đang tìm kiếm các byte sau khi có hiệu quả chuyển đổi sang ký tự you'ev đã tìm Char (x1f) Char (8B) char (8) –