2011-01-01 2 views
1

위치를 설정할 때 SetFilePointerEx을 사용할 수있었습니다.SetFilePointerEx를 사용하여 실제 디스크의 끝으로 이동하려면 어떻게합니까?

SetFilePointerEx(PD, 512, @PositionVar, FILE_BEGIN); 
SetFilePointerEx(PD, 0, @PositionVar, FILE_CURRENT); 

둘 다 작동; 나는 위치를 설정하고 현재 위치를 확인할 수도 있습니다. 하지만 두 번째 매개 변수가 무엇인지에 관계없이 설명서마다 FILE_END을 설정하면 세 번째 매개 변수에 대한 포인터를 제공하는지 여부에 관계없이 많은 다른 작업을 실패없이 사용할 수있는 유효한 핸들에서도 실패합니다. 예를 들어

: 내가 넣어 무엇이든

SetFailed := SetFilePointerEx(PD, 0, @PositionVar, FILE_END); 
SetFailed := SetFilePointerEx(PD, 0, nil, FILE_END); 

, 그것은 실패합니다. 나는 물리적 인 디스크에 대한 핸들을 가지고 일하고 있는데, 확실히 끝이있다. SetFilePointer은 잘 작동하지만, 내가 원하는 것보다 조금 더 문제가 있습니다.

세계의 끝은 아니지만, 무슨 일이 일어나고 있는지.

+0

닉 편집 롭, 제목은 반드시 정확하지는 않습니다. 나는 단지 물리적 인 매체로부터 충분한 공간을 얻으려고 노력했다. 이론을 통해이 방법을 통해 수행 할 수있는 것은 더 이상 유효한 방법으로 보이지 않습니다. 이전 제목에서 문제가있는 사람을위한 검색어를 검색하지만 누군가가이 특정 질의 응답 세션에서 도움을 얻지 못한다고해도 게시물 정리에 감사드립니다. 누구든지 투표를 해 주셔서 마침내 투표 할 수 있습니다 :) – SuicideClutchX2

+0

@Suicide,이 질문에 대한 답변을 읽어보십시오. http://stackoverflow.com/questions/4567422/ SetFilePointer가 작동하지 않는다고 전적으로 말씀하셨습니다. FILE_END 및 디스크 장치를 사용하여 int64를 사용하여 원하는 위치로 파일 포인터를 이동할 수있는 루틴을 제공했으며 David는 Hacky 코드를 사용하지 않고 장치 크기를 가져 오는 좋은 방법을 보여주었습니다. 왜 다시 같은 질문을해야합니까? –

+0

은 개정 전보다 더 좋았습니다 –

답변

3

당신이 알아 낸 것처럼 이것을 할 수 없습니다. 당신은 처음부터 현재까지 추구해야합니다. DeviceIoControl을 사용하여 장치의 크기를 찾습니다.

+0

그게 내가 일할 다음 일 이었어. 너를 전에 지적 해 주셔서 고맙습니다. 나는 당신이 같은 길로 보였던 것을 지키기 위해 나를 때 리려고한다고 생각했습니다. Microsoft는 실패했습니다. 아, 뉴스가 아닐 때까지 기다려주십시오. 그것이 가능할 때 몇 분 안에 답변이 제외 될 것입니다. – SuicideClutchX2

+0

@suicide 비 전 버전과 함께 작동하는 경우 왜 그것을 사용하지 마십시오. 내가 연결 한 GpHugeFile 유닛은 당신에게 그것이> 2gb가되도록하는 방법의 예를 제공 할 것입니다. –

+0

유닛을 보겠습니다. 이전에 한 페이지 만 보았습니다. SetFilePointer를 사용하여 고차원 및 하위 주문 개념에 약간의 문제가 있으며 64 비트 변수로 결합하여 결말 값을 읽을 수 있습니다. 나는 비트 레벨에서 그것을 이해한다. – SuicideClutchX2

관련 문제