2010-05-26 2 views
2

FO_MOVE 작업과 함께 Windows SHFileOperation 기능을 사용하는 코드가 있습니다. 추가 플래그는 FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT.SHFileOperation FO_MOVE는 대상 드라이브가 꽉 찬 경우 파일을 삭제합니다.

대상 드라이브가 가득차면 이상한 동작이 관찰되었습니다. 이 경우 MOVE는 대상 폴더에 파일을 배치 할 수 없지만 소스 파일도 손실됩니다. 이것은 예기치 않게 발생했으며 이로 인해 데이터가 손실되었습니다.

SHFileOperation의 표준 동작입니까? 대상 드라이브에 공간이 있으면 MOVE와 같은 것을 사용할 수 있습니까? 그렇지 않으면 원래 위치에 파일을 남겨 둘 수 있습니까?

+0

BTW "CreateFileEx"가 실패 상태를 반환하지만 디렉터리를 삭제하므로 WinAPI 오작동에 놀라지 않습니다. –

답변

0

나는 이것에 대해 들어 보지 못했다. 버그처럼 들린다.

FO_COPY로 이동 작업을 나눠서 FO_DELETE (FO_COPY 작업이 성공했다고 가정)을 더 실용적인 방식으로 선택하는 것이 가장 좋습니다.

또한 소스 및 대상 볼륨이 동일한시기를 구현이 감지 할 수있는 경우 효율성을 얻을 수 있습니다. 이 경우 FO_MOVE로 되돌릴 수 있어야합니다. 같은 볼륨에서의 이동 작업은 일반적으로 이름 바꾸기 + 메타 데이터 이동으로 분류됩니다.

0

대상 파일이 대상 미디어 또는 파일 시스템에 비해 너무 큰 경우 SHFileOperation은 DE_FILE_TOO_LARGE (0x85)를 반환해야합니다.

관련 문제