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

时间:2014-08-05 09:52:09

标签: c#

我有一个像这样的文件

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#。

1 个答案:

答案 0 :(得分:0)

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

将字节转换为二进制文件不是您想要做的。在此上下文中,二进制表示基础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
}