2012-01-30 2 views
3

바이너리 형식으로 파일을 읽는 방법을 알고 싶습니다.TIFF 헤더 파일을 읽는 방법 파일 C#?

예를 들어 tiff 이미지 파일의 hex 값은 0000 4949 002A 0000입니다. 이 값은 C#에서 어떻게 얻을 수 있습니까?

+0

'바이트 [] 버피 = 새로운 바이트 [???] –

+0

이 스 니펫을 시도했는데 성공했습니다 – 1AmirJalali

+0

참고 - 이것은 TIFF의 올바른 헤더 형식이 아닙니다. 49 49 2a 00 (Intel 바이트 순서) 또는 4d 4d 00 2a (Motorola 바이트 순서) 일 수 있으며 질문에있는 것이 아닙니다. – plinth

답변

3

내가 보통 16 진수 형식의 파일을 읽는 방법, 당신이 필요로 헤더에 대해 변경 :

using System; 
using System.Linq; 
using System.IO; 

namespace FileToHex 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //read only 4 bytes from the file 

      const int HEADER_SIZE = 4; 

      byte[] bytesFile = new byte[HEADER_SIZE]; 

      using (FileStream fs = File.OpenRead(@"C:\temp\FileToHex\ex.tiff")) 
      { 
       fs.Read(bytesFile, 0, HEADER_SIZE); 
       fs.Close(); 
      } 

      string hex = BitConverter.ToString(bytesFile); 

      string[] header = hex.Split(new Char[] { '-' }).ToArray(); 

      Console.WriteLine(System.String.Join("", header)); 

      Console.ReadLine(); 

     } 
    } 
} 
+0

System.IO.File.ReadAllBytes() 함수는 전체 파일을 읽습니다. 제한된 수의 바이트를 읽는 방법을 찾고 있습니다. – 1AmirJalali

+0

좋아요, 몇 바이트 만 읽도록 편집했습니다. –

+0

'string str = bytesFile.Aggregate ("", (s, b) => s + = b.ToString ("X2")); ' –

2

당신은 배열에 바이트를 읽도록하는 System.IO.File 클래스의 ReadAllBytes 방법을 사용할 수 있습니다

System.IO.FileStream fs = new System.IO.FileStream(@"C:\Temp\sample.pdf", System.IO.FileMode.Open, System.IO.FileAccess.Read); 
int size = 1024; 
byte[] b = new byte[size]; 
fs.Read(b, 0, size); 
+0

파일 크기가 큰 경우 (예 : 300 메가 바이트 이상) 읽을 바이트 수를 제한하는 방법이 있습니까? – 1AmirJalali

+0

System.IO.File.ReadAllBytes() 함수는 전체 파일을 읽습니다. 제한된 수의 바이트를 읽는 방법을 찾고 있습니다. – 1AmirJalali

+0

파일의 처음 1024 바이트를 읽도록 코드를 수정했습니다. –

0

내가 LibTIFF.Net, http://bitmiracle.com/libtiff을 사용하지 않은하지만 상당히 완료 될 것으로 보인다.

파일을 바이트로 읽은 다음 헤더를 디코딩하는 것이 훨씬 쉽습니다. 여기

+0

지금은 LibTIFF.Net을 사용하고 있지만 TIFF 헤더 파일에 "바이트 순서"를 표시 할 수있는 항목을 찾을 수 없습니다. – 1AmirJalali