Windows에서 xfs 파일 시스템을 구문 분석 할 작은 유틸리티를 작성하고 있습니다. 작은 이미지의 경우 < 5GB 내 유틸리티가 잘 작동 중입니다. 모든 파일과 디렉토리를 나열 할 수 있습니다. 그러나 큰 xfs 이미지> 30GB를 구문 분석하려고 할 때. 그것은 잘못된 결과를주고 있습니다. 저는 seek과 fread에서 _fseeki64와 _ftelli64를 사용하여 특정 블록을 읽습니다. 주목할 점은 _fseeki64가 제대로 작동하지 않는다는 것입니다. 다음은 특정 그룹 번호와 블록 번호를 찾는 내 탐색 기능입니다.Windows에서 C++로 대용량 파일 찾기
그러나 위의 기능은 나를 잘못된 위치로 안내합니다. 예를 들어 나는 그룹 번호에 m_fileSystemInfo.SizeOfBlockGroup = 2043982 및 m_fileSystemInfo.BlockSize = 4096
내가 기대하고있어 currPrt = * 4096 2,043,982 * 2 = 16,744,300,544 (0x3E609C000), 그러나 _ftelli64와 = 2를 추구 할 때 반환됩니다 (0xE609C000). 무엇이 잘못 될 수 있는지 제안하십시오. 또한 C++의 윈도우에서 대용량 파일을 처리하는 가장 좋은 방법은 무엇입니까?
는 업데이트 ::
나는 나 대신 (0x3e609c000) inspite가 __int64을 16,744,300,544 사용의 실제 값의 seekOffset가 8,154,365,952 (0x1e609c000)로 제한지고 있음을 발견했다.
So.
는 _ * 4096 INT64 seekOff = ( _int64) (grpNum * m_fileSystemInfo.SizeOfBlockGroup * m_fileSystemInfo.BlockSize) = 2 * 2043982 대신 16744300544.
의 8154365952를주고 내가 무엇을 할 수 확실하지 않다 모든 것이 __int64에있는 이유.
2 * 2043982 * 4096의 오프셋 계산이 실제 값 16744300544 대신 8154365952로 제한된다는 것을 알았습니다. 대부분의 장소에서 __int64를 사용했지만 도움이되지 않습니다. – praks411