Согласно http://www.garykessler.net/library/file_sigs.html, полная подпись точечного файла (среди прочего):
D0 CF 11 E0 A1 B1 1A E1
Итак, ниже приведен код для начала. Он работает для .dot, но если вы хотите проверить .dotx, вы можете реализовать подобный код. Это не гарантирует, что это правильная точка, поэтому вам все равно придется обрабатывать ошибки позже.
// Use this as a class field.
private static readonly byte[] DOT_SIGNATURE = new byte[]{0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1};
Позже, когда у вас есть Поток:
bool isDot = true;
Stream dotStream = ...
byte[] firstBytes = new byte[DOT_SIGNATURE.Length];
int totalRead = 0, curRead;
while(totalRead < DOT_SIGNATURE.Length)
{
curRead = dotStream.Read(firstBytes, totalRead, DOT_SIGNATURE.Length - totalRead);
if(curRead == 0)
{
isDot = false;
break; // Premature end of stream;
}
totalRead += curRead;
}
if(isDot)
{
for(int i = 0; isDot && i < DOT_SIGNATURE.Length; i++)
{
// If isDot becomes false, arrays are not equal and we break out.
isDot = (firstBytes[i] == DOT_SIGNATURE[i]);
}
}
dotStream.Seek(0, SeekOrigin.Begin);