如何从文件末尾开始的二进制文件中读取特定值?

时间:2013-11-21 20:01:59

标签: c# pdf filestream reverse binaryreader

我试图弄清楚如何从PDF文件中实际(适当地)读取PDF预告片 Byte_offset_of_last_cross-reference_section

根据PDF 1.7 (ISO 32000-1:2008)规范,文件结构的设计应该从文件末尾读取。下面是我使用StreamReader并逐行读取文件(UTF8编码)时简化(最小)预告片的示例:

  

拖车
  << key1 value1
  key2 value2
  ...
  keyn valuen
  >>
   startxref
   Byte_offset_of_last_cross-reference_section
  %% EOF

trailer
<</Root 7 0 R /Size 7>>
startxref
696
%%EOF

我想以某种方式获取的值是 696 值。我只是不确定如何使用从文件末尾开始的BinaryReader。

2 个答案:

答案 0 :(得分:2)

您可以使用Seek方法,有关示例,请参阅here。您可以使用SeekOrigin.End作为参数,有关其他选项,请参阅here

示例:

using (var reader = File.Open(...))
{
    reader.Seek(100, SeekOrigin.End);
    //...
}

你可以开始在循环中向后阅读,直到你到达startxref标记(或任何可以帮助你知道你可以阅读696的东西)或假设从结尾的100字节长度该文件然后在安东尼在下面的评论中建议的那个小数组中进行查找。

答案 1 :(得分:0)

如何使用以下内容:

List<string> allLines = File.ReadAllLines(filePathHere);
return allLines[allLines.Count - 2];