2011-12-14 5 views
1

CreateFile() Windows API를 사용하여 파일을 만들거나 여는 중입니다. 내 드라이브에 불량 섹터가있어 파일을 열 수 없거나이 파일에 쓰려는 시도가 실패했다고 가정 해 봅시다. 동일한 CreateFile() API를 사용하여 파일을 다시 작성하면 드라이브의 이전 메모리와 동일한 메모리 위치에 파일이 만들어 지므로 (잘못된 섹터가 다시있을 수 있습니다) 또는 다른 메모리가 선택됩니다 운영 체제별로 불량 섹터를 피할 수있는 기회가 있습니까?CreateFile 및 메모리 관리

내 질문은 Windows가 CreateFile() 함수로 파일을 만들 때 Windows가 실제 드라이브에 메모리를 할당하는 방식이라고 생각하십니까?

+1

새 API 호출은 새로운 핸들을 생성합니다. 이 API는 물리적 드라이브에 액세스 및 배치를 지정하기에 충분히 낮은 수준이 아닙니다. Windows는 항상 처음부터 불량 섹터에 쓰지 않아야하는 이유를 결정합니다. 실제로 어떤 문제를 해결하려고합니까? – AJG85

+0

제 소프트웨어에서는 파일에 쓰는 것이 잘못되었을 때를 처리하려고합니다. 이것은 물리적 인 드라이브 고장이거나 단지 불량 섹터 일 수 있습니다. 불량 섹터의 경우 파일을 다시 만들고 다시 쓰고 싶습니다. 문제는 새로운 파일을 만들 때 같은 불량 섹터에 다시 충돌하지 않을 가능성이 있습니까? – ViP

+1

사람들은 일반적으로 좋은 파일 시스템을 사용하여이 문제를 해결합니다. NTFS는 자동으로 불량 섹터를 탐지하고 플래그합니다. 또한 데이터를 복구하고 다른 (양호한) 부문에 저장합니다. FAT의 경우 'chkdsk/r'은 섹터를 잘못된 것으로 표시하고 Windows는 자동으로이를 피합니다. 데이터 손상에 대해 걱정할 특별한 이유가 있습니까? RAID를 사용하거나 네트워크를 통해 복제하거나 최후의 수단으로 데이터를 두 번 로컬로 쓰고 체크섬에 의존 할 것을 제안합니다. – jweyrich

답변

1

CreateFile이 실패하면 INVALID_HANDLE_VALUE을 반환합니다.

MSDN에 따르면 GetLastError으로 전화하여 이유를 확인하십시오.