Tag: binaryreader

BinaryReader – 阅读单个“BIT”?

案件 : 再次尝试通过我的NIC捕获数据包, 我开发了2个Extensions用于捕获可变数量的位 public static string ReadBits ( this BinaryReader Key , int Value ) { BitArray _BitArray = new BitArray ( Value ); for ( int Loop = 0 ; Loop > Value ; Loop++ ) { /* Problem HERE —> */ _BitArray [ Loop ] = Key . ReadBoolean ( ); } […]

从C#的zip文件中读取二进制文件而不解压缩

我想从zip文件中读取二进制文件而不解压缩它。 zip文件结构: zipFolderName/subFolder/BinFile 在BinFile中,我有: Id1, id2, value1 // id1, id2 are string, value1 is int 在C#中: ZipEntry binFileName = …; // it has been got from zipFile entries MemoryStream ms = new MemoryStream(); binFileName.Extract(ms); using (BinaryReader reader = new BinaryReader(ms)) { string id1 = reader.ReadString(); // error popped here string id2 = reader.ReadString(); int value1 […]

二进制读写器同时打开?

我正在编写处理使用哈希值的文件的代码。 我需要读取一个块,然后散列它,然后写入它,然后读取另一个块等。 换句话说,我需要做很多阅读和写作。 我确信这很简单,但我只是想由专业人士运行它… 做以下事情是可能的,也是可以接受的: BinaryReader br = new BinaryReader (File.OpenRead(path)); BinaryWriter bw = new BinaryWriter (File.OpenWrite(path)); br.dostuff(); bw.dostuff(); 我记得在尝试打开和写入文件时遇到某种冲突的文件流错误,我不知道我做了什么才能得到它。 问题是两个文件流吗? 我可以有一个流来读取和写入吗?

用于BinaryReader的EndOfStream

BinaryReader没有EndOfStream属性。 使用以下代码检查是否到达流的末尾是否安全? reader.BaseStream.Length>reader.BaseStream.Position

从byte 转换为string

我有以下代码: using (BinaryReader br = new BinaryReader( File.Open(FILE_PATH, FileMode.Open, FileAccess.ReadWrite))) { int pos = 0; int length = (int) br.BaseStream.Length; while (pos < length) { b[pos] = br.ReadByte(); pos++; } pos = 0; while (pos < length) { Console.WriteLine(Convert.ToString(b[pos])); pos++; } } FILE_PATH是一个const字符串,包含要读取的二进制文件的路径。 二进制文件是整数和字符的混合。 整数每个1个字节,每个字符作为2个字节写入文件。 例如,该文件包含以下数据: 1HELLO你是如何看待你的//等等 请注意:每个整数都与其后面的字符串相关联。 所以1与“HELLO HOW ARE YOU”有关,45与“你看起来很棒”等等有关。 现在编写了二进制文件(我不知道为什么,但我必须忍受这个),这样“1”只需要1个字节,而“H”(和其他字符)每个需要2个字节。 所以这是文件实际包含的内容: 0100480045 […]

当BinaryReader打开时使用Stream.Seek是否安全?

由于BinaryReader的底层缓冲策略,我不清楚是否可以读取存储在流中的偏移量,然后在此偏移处重新定位流以恢复流式传输。 例如,以下代码可以: using (var reader = new CustomBinaryReader(inputStream)) { var offset= reader.ReadInt32(); reader.BaseStream.Seek(offset, SeekOrigin.Begin); //Then resume reading the streaming } 或者我应该在寻找流之前关闭第一个二进制阅读器,然后重新打开第二个阅读器? int offset; using (var firstReader = new CustomBinaryReader(inputStream)) { offset= firstReader.ReadInt32(); } inputStream.Seek(offset, SeekOrigin.Begin); using (var secondReader = new CustomBinaryReader(inputStream)) { //Then resume reading the streaming }

在C#中读取大端数据的有效方法

我使用以下代码使用BinaryReader读取BigEndian信息,但我不确定它是否是有效的方法。 有没有更好的解决方案? 这是我的代码: // some code to initialize the stream value // set the length value to the Int32 size BinaryReader reader =new BinaryReader(stream); byte[] bytes = reader.ReadBytes(length); Array.Reverse(bytes); int result = System.BitConverter.ToInt32(temp, 0);

为什么Code Analysis告诉我,“不要多次丢弃对象”:

在这段代码上: public static string Base64FromFileName(string fileName) { try { FileInfo fInfo = new FileInfo(fileName); long numBytes = fInfo.Length; FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fStream); byte[] bdata = br.ReadBytes((int)numBytes); br.Close(); fStream.Close(); return Convert.ToBase64String(bdata); } catch(Exception e) { throw e; } } …我得到了Visual Studio的代码分析工具,警告,“ 不要多次丢弃对象……为了避免生成System.ObjectDisposedException,你不应该在对象上多次调用Dispose ” fStream.Close();” 线。 为什么? fStream是否在上面的行中,BinaryReader关闭了? 无论如何我不会更好地重构它: […]

C# – Big Endian的二进制阅读器?

我正在尝试通过使用程序读取所有不同的信息来提高我对STFS文件格式的理解。 使用一个网站参考哪些偏移包含哪些信息,我写了一些有二进制阅读器的代码遍历文件并将值放在正确的变量中。 问题是所有数据都被支持为Big Endian,二进制读取器读取的所有内容都是Little Endian。 那么,解决这个问题的最佳方法是什么? 我可以创建一个二进制读取器的模拟类,它返回一个反向的字节数组吗? 有什么我可以在类实例中更改它将使它以大端读取,所以我不必重写所有内容? 任何帮助表示赞赏。 编辑:我尝试添加Encoding.BigEndianUnicode作为参数,但它仍然读取小端。