读取文件的一部分为文本,一部分为二进制

本文关键字:一部分 二进制 文本 文件 读取 | 更新日期: 2023-09-27 18:16:20

我有一个这样的文件

10 NDI 27 2477 6358 4197 -67 0 VVFAˆ ÿÿÿÿ

最后一列是二进制。我必须阅读这个文件,问题是,我不能读它作为一个文本,因为在一些行的最后一列有一个新的行字符,因此我不会读取整个行。然后我应该将其作为二进制文件读取,但是我如何检索第一列和第三列呢?我尝试用这种方式读取字节:

byte[] lines1 = System.IO.File.ReadAllBytes("D:''dynamic''ap1_dynamic''AP_1.txt");

然后用

转换成字符串
 for (i = 0; i < lines1.Length; i++) {
       Convert.ToString(lines1[i],2);
 }

,然后它读取所有内容为0和1…我想阅读前8列作为文本,而最后一个作为二进制..

我使用的是Visual Studio 2013, c#

读取文件的一部分为文本,一部分为二进制

将文件读取为二进制是正确的,因为您可以将部分二进制数据转换为文本。在此上下文中,二进制表示字节。

将字节转换为二进制不是您想要做的。在此上下文中,二进制表示以2为基数的文本表示,但您不想要数据的文本表示。

如果行是固定长度的,您可以这样做来读取值:

int lineLen = 70; // correct this with the actual length
int firstPos = 0;
int firstLen = 3; // correct with actual length
int thirdPos = 15; // correct with actual position
int thirdLen = 3; // correct with actual length
int lastPos = 60; // correct with actual position
int lastLen = 10; // correct with actual length
int lines = lines.length / lineLength;
for (int i = 0; i < lines; i++) {
  int first = Int32.Parse(Encoding.UTF8.GetString(i * lineLen + firstPos, firstLen).Trim());
  int third = Int32.Parse(Encoding.UTF8.GetString(i * lineLen + thirdPos, thirdLen).Trim());
  byte[] last = new byte[lastLen];
  Array.Copy(lines1, i * lineLen + lastPos, last, 0, lastLen);
  // do something with the data in first, third and last
}