본문 바로가기
Programming/C++

removeRecursively 한글 파일 삭제 실패 해결방법(Qt5)

by AUTORI 2021. 10. 23.

리눅스 환경에서 Qt를 사용하여 개발을 하다 보면 가끔 파일이 완벽하게 삭제가 안되는 경우가 있습니다. removeRecursively 함수 삭제 실패 원인과 해결 방법에대해서 알아보겠습니다.

 

 

 

Qt5 Linux 한글 파일 포함된 폴더 삭제 시, 실패 현상 발견

 

리눅스(Linux) 환경에서 removeRecursively() 함수를 사용하여 폴더 삭제를 하면 항상 파일명이 한글로 된 파일이 남아 있었습니다. 그리고 removeRecursively() 결과는 항상 false값을 반환했습니다.

 

QDir dir(path);
if (dir.removeRecursively()){
    return true;
} else {
    return false; //폴더 안에 한글 파일이 포함되면 실패한다...
}

 

의문이 드는 점은 폴더 삭제 실행 후, 폴더를 확인해보면 한글 파일들은 남아있고 영문 파일들은 삭제되어 있다는 점입니다. removeRecursively() 함수가 한글 파일명을 인식하지 못한 것 같습니다. Qt 홈페이지에서도 removeRecursively() 함수가 폴더를 삭제하지 못할 경우, 가능한 많은 파일과 하위 폴더들을 삭제 시도하며 결국에는 false 값을 반환한다고 설명되어있습니다. 

 

 

 

removeRecursively 함수 삭제 실패 원인 및 해결 방법

 

removeRecursively 함수 실패 원인은 바로 인코딩 문제였습니다. 삭제하고 싶은 폴더 안에 한글파일이 포함되어 있으면, 삭제 전에 'UTF-8'로 인코딩 변경이 필요했습니다. 한글파일을 사용한다면, 그리고 파일 삭제가 필요하다면 setCodecForLocale() 함수를 사용하여 인코딩을 'UTF-8'로 변경해주어야 합니다.

 

QTextCodec :: setCodecForLocale( QTextCodec :: codecForName("UTF-8"));
QDir dir(path);
if (dir.removeRecursively()){
    return true; //폴더 삭제 성공!!
} else {
    return false;
}

 

 

 

댓글