[D] D언어로 파일 경로에서 파일명만 가져오기 D




파일 경로에서 파일명만 가져오는 작업을 직접 만들게 된다면, 먼저 해당 문자열을 디렉토리 구분자(윈도우는 \, 리눅스 계열은 /)를 기준으로 잘라 배열로 만듭니다. split 함수 처럼요.
배열의 길이 값을 배열 인덱스로 넘겨주면, 즉 배열의 가장 마지막 요소 값을 파일명이라고 가정할 수 있습니다.
윈도우에는 역슬래시(\), 리눅스 계열에서는 슬래시(/)가 파일명에 들어갈 수 없기 때문에 실제 운영체제별 파일경로 상에서 얻어온 경로 값이라면 이렇게 추출한 값은 믿고 쓸 수 있겠습니다.
이에 대한 실제 파이썬 구현과 해설은 코딩도장의 글을 참고하시면 되겠습니다.

사실 프로그램 짜다 보면 가끔 이런 기능을 라이브러리로 제공해주지 않아 직접 구현해야될 때가 있습니다. 좀 번거롭죠...
D언어에서는 표준 라이브러리인 std.pathbaseName 함수가 위 기능을 합니다.

 1
2
3
4
5
6
7
8
9
10
import std.stdio;
import std.path:baseName;
void main() {
string target = "C:\\D\\dmd2\\windows\\bin\\dmd.exe";
writeln(target);
writeln(baseName(target));
writeln(baseName(target, "exe"));
writeln(baseName(target, ".exe"));
writeln(baseName(target, ".hwp"));
}


위 코드는 아래와 같이 출력 됩니다.

C:\D\dmd2\windows\bin\dmd.exe
dmd.exe
dmd.
dmd
dmd.exe

 baseName함수에 대상이 되는 경로 문자열만 넣으면 파일명만 리턴 받을 수 있습니다.
그 뒤에 추가로 넣은 문자열은 리턴 받을 파일명의 우측 기준으로 문자열을 지웁니다.

이 외에도 파일 경로에서 파일명을 얻거나, 경로명을 조작할 때 std.path에 유용한 기능들이 많습니다.



참고해서 보시면 좋을 듯 하네요.

덧글

  • 지온 2020/03/23 01:16 # 답글

    리눅스에선 가 파일 이름으로 들어가지긴 합니다... 쓰는 사람은 없겠지만!
  • ZHANITEST 2020/03/23 01:54 #

    안녕하세요, 덧글 남겨주셔서 감사합니다.
    가 파일이름이라는 게... 말씀해주시는 내용을 제가 잘 이해를 못한 것 같습니다. 좀 더 자세히 말씀해주실 수 있으신가요?
    위 글의 착오 내용이라면 바로 정정토록 하겠습니다.
  • 지온 2020/03/25 21:52 #

    역슬래쉬요... 댓글에선 안보이네요
  • ZHANITEST 2020/03/25 23:01 #

  • ZHANITEST 2020/03/25 23:02 #

    알려주셔서 감사합니다. 내용 수정하겠습니다.
댓글 입력 영역