File.RenameError 예외
File.RenameError 예외
파일이나 디렉터리의 이름을 바꾸는(rename) 작업이 실패했을 때 발생하는 예외예요. 이름을 바꾸려는 대상 파일이 존재하지 않으면 이 예외가 떠요.
예를 들어 없는 파일의 이름을 바꾸려고 하면 다음처럼 에러가 나요.
iex> File.rename!("source.txt", "target.txt")
** (File.RenameError) could not rename from "source.txt" to "target.txt": no such file or directory
본문
File.rename/2나 File.rename!/2는 파일의 이름(경로)을 바꿔 주는 함수예요. 이때 원본 파일이 실제로 존재해야 이름을 바꿀 수 있는데, 그 파일이 없거나 경로가 잘못되면 이 예외가 발생해요.
이 예외는 문제를 파악하기 위한 공개 필드를 제공해요.
:source(Path.t/0) — 이름을 바꾸려는 원본 경로예요.:destination(Path.t/0) — 새로 바뀌어야 할 목적지 경로예요.:reason(File.posix/0) — 이름을 바꾸지 못한 이유예요.
:reason 필드를 보면 "원본이 없어서 실패한 건지"(:enoent), "권한이 없어서 실패한 건지" 같은 원인을 구분할 수 있어요. 파일을 옮기거나 이름을 갱신하는 코드에서 실패 지점을 정확히 추적할 때 유용하죠.
실무에서는 파일을 임시 이름으로 저장한 뒤, 저장이 끝나면 최종 이름으로 바꾸는 "원자적 쓰기(atomic write)" 패턴에서 이 예외를 만나기도 해요. 그런 코드라면 원본 경로와 목적지 경로 양쪽이 정상인지, 그리고 디렉터리 권한이 있는지를 함께 점검해 보는 게 좋아요.
더 알아보기
File.rename/2와File.rename!/2의 차이(튜플 반환 vs 예외 발생)를 함께 확인해 보세요.- 파일 경로를 다루는 방법은
Path모듈 문서에서 자세히 볼 수 있어요. - 오류 이유 타입의 의미는
File.posix/0문서를 참고해요.