읽기는 생각대로하지 않습니다.
Read
오프셋이 데이터를 쓰기 시작하는 시점의
버퍼의 선두로부터의 오프셋 (offset), 이것은 읽기를 시작하는 시점의
파일 오프셋되지 않는다. 이미 부분적으로 버퍼를 채워 한 당신은 좀 더에 압정하려면
그것은 단지 일반적으로 비 제로는 다음과 같습니다
fs.Read (data, 0, 8); // Put first 8 bytes of file at buffer start
fs.Read (data, 16, 8); // Put next 8 bytes of file at buffer end
fs.Read (data, 8, 8); // Put first 8 bytes of file at buffer middle
그 예로, aaaaaaaabbbbbbbbcccccccc
가 포함 된 파일은 버퍼에 끝날 것 로 :
aaaaaaaaccccccccbbbbbbbb
먼저 추구해야하고, 그것을 아주 쉽게 8G 파일을 처리 할 수 있어야합니다 그래서 오프셋 값으로 long
을 사용합니다. 이런 식으로 뭔가 좋은 출발점이 될 것입니다 :
private void readingLargeFile (string path) {
long start = 3L * 1024L * 1024L * 1024L;
FileStream fs = new FileStream (path, FileMode.Open);
fs.Seek (start, SeekOrigin.Begin)
fs.Read (data, 0, 8 * 1024);
}
(이 읽기 및/또는 개방 모드와 기능 당신이 전화에 따라 쓸 것) 파일의 현재 위치에 Seek
변경됩니다.
그래서 fs.Seek (start, SeekOrigin.Begin)
은 파일 포인터를 파일의 시작 부분에서 start
자로 설정합니다. SeekOrigin.Begin
이외의 다른 이동 방법을 지정하여 앞으로 27 바이트와 같은 현재 위치에서 찾거나 파일의 끝에서 검색 할 수 있습니다.
전체 세부 사항은 Seek
및 Read
에 대해 MSDN에서 사용할 수 있습니다.
고마워요. PAXDIABLO ..하지만 내게 설명 할 수있는 fs.Seek (시작, SeekOrigin.Begin) 않습니다! –
문제 없음, @ MurHafSoz - 관련 MSDN 설명서에 대한 설명과 링크를 추가했습니다. – paxdiablo