[MFC] MSDN이 알려주지 않는 CFileFind::FindFile 이야기

MSDN이 개발자를 위한 레퍼런스 사이트로 훌륭하다는 것은 인정합니다. (번역 페이지가 엉터리라는 것은 논외로) 하지만 가끔 어떤 메서드는 이런 파라미터를 넣으면 결과가 어떻게 나올까 예측이 잘 안되어서, 실제로 테스트를 해봐야 안심하고 쓸 수 있습니다.

예를 들어보겠습니다. CFileFind 클래스에는 FindFile이란 메서드가 있습니다. MSDN의 이 함수에 대한 설명 중 요점만 여기 옮겨보겠습니다.

virtual BOOL FindFile( 
   LPCTSTR pstrName = NULL, 
   DWORD dwUnused = 0  
);
파일 검색을 시작하려면 이 멤버 함수를 호출 합니다.
매개변수
pstrName: 찾을 파일의 이름을 포함하는 문자열에 대한 포인터. NULL을 전달하는 경우 와일드 카드 (*. *) 검색.
반환값
성공하면 0이 아닌 값, 그 외에는 0. 확장 오류 정보를 표시하려면 Win32 함수를 호출합니다. GetLastError

FindFile의 매개변수 pstrName으로 **"C:"**를 넘기면 어떤 결과가 나올까요? 또, **"C:"**대신 **"C:"**를 넘겨보면 어떤 결과가 나올까요?

같은 결과가 나올 것 같다구요?

그렇게 알고 사용하시면 큰 일 납니다.

메서드 하나라도 테스트할라 치면, 시간이 잘 가버리죠. 여러분의 소중한 시간을 아껴드리기 위해, 제 실험결과를 포스트로 남깁니다. CFileFind::FindFile 쓰시기 전에 필독 하시기를!

  • C:\ 를 건냈더니, 0을 리턴
  • C: 를 건냈더니, 1을 리턴
  • C:\MyFolder\ 를 건냈더니, 0을 리턴
  • C:\MyFolder 를 건냈더니, 1을 리턴

(C드라이브 아래 MyFolder란 폴더는 실제 존재한다고 가정합니다.)

경로 맨 뒤에 역슬래시(\)가 붙어있는 경우, 예상치 못한 결과로 골탕을 먹게 됩니다. 따라서 FindFile을 호출하기 전, 경로 문자열의 맨 끝에 역슬래시(\)를 제거해야 안전한 코드가 됩니다.

즐코하세요!