프로그래밍 언어를 사용하여 파일의 path 를 다루는 경우 path 를 합치고 분리하고 하는 과정은 매우 흔한 일입니다.

일단 Autohotkey 를 사용하여 path를 나누는 경우는 SplitPath 라는 명령어를 사용하면 됩니다.

그런데 합치는 경우에는 딱히 전용 함수가 없어서 그냥 string 을 붙여서 만들어야 합니다. 물론 string 을 붙여넣는것도 괜찮지만 잡스러운 처리가 필요한 경우들이 종종 있습니다.

예를 들어 아래 두개의 path 를 그냥 붙이게 된다면~


base := A_WinDir . "\System32\"

rel := "..\Media\test.wav"

fullpath := base . rel ; string 붙이기

아래와 같이 표시가 될 것 입니다. 보시다시피 그냥 문자 붙이기 이므로 .. (점점) 등이 그대로 표시가 됩니다. 위 path 중 rel 변수의 ..(점점) 은 상위 폴더를 의미 하므로 path 를 붙이기 전에 그에 맞게 처리를 해 줘야 합니다.

이런 문제를 쉽게 해결하기 위해서 Windows 내부의 함수를 사용할 수 있고 path 를 붙여 주는 함수로 PathCombine 이라는 함수가 있습니다. 해당 함수는 Shlwapi.dll 파일에 들어 있으므로 DllCall 명령을 통해 사용할 수 있습니다. 해당 함수를 아래와 같이 함수로 만들어서 사용하면 편리할 것입니다.

PathCombine(abs, rel) {

VarSetCapacity(dest, (A_IsUnicode ? 2 : 1) * 300, 1) ; MAX PATH

DllCall("Shlwapi.dll\PathCombine", "UInt", &dest, "UInt", &abs, "UInt", &rel)

Return, dest

}

위 함수를 사용하여 아래와 같이 path 를 join 해 보면~

MsgBox, % PathCombine(base, rel)

아래와 같이 알아서 상위 폴더로 설정하고 path 를 붙여 주는 것을 확인 할 수 있습니다.

Autohotkey DllCall 사용 방법에 대해서는 아래 주소에 메뉴얼이 있으니 확인해 보시기 바랍니다.

https://www.autohotkey.com/docs/commands/DllCall.htm



프로그래밍을 하다 보면 파일 또는 폴더의 path 를 자주 다루게 됩니다.

 

아래 포스팅에서는 Autohotkey 에서 SplitPath 함수를 사용해서 file path 를 구분하는 방법에 대해 소개한 적이 있는데~

  

2013/11/14 - [programming language/Autohotkey] - Autohotkey SplitPath 를 이용하여 폴더, 파일명, 확장자, 드라이브 구분하기

 

오늘은 C++ 를 사용한 file path 구분 방법에 대해 소개하려 합니다.

 

코드는 굉장히 간단한데요~

 

위 코드와 같이 stringstream 과 getline 함수를 사용하고~

 

C:/Windows/System32/vbscript.dll 라는 path 를 '/' 에 따라 나눠보면~

 

다음과 같은 결과가 나옵니다. 다음 그림에서 보는 바와 같이 C:, Windows, System32, vbscript.dll 로 구분되는 것을 확인 할 수 있습니다.



Autohotkey를 이용하면 파일의 경로명 등을 다룰 때 매우 유용하게 사용할 수 있다.

 

예를 들어 D:\temp\temp.txt 라는 path가 있을 때 경로, 파일이름, 확장자 등으로 나누고 싶은 경우가 있다.

 

이런 경우 정규 표현식을 사용해도 되지만 Autohotkey 에서는 SplitPath 를 함수가 있다.



http://www.autohotkey.com/docs/commands/SplitPath.htm

 

 

사용 방법은 다음과 같다.

SplitPath, InputVar [, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive]

 

위 함수에서 대괄호 [ ] 부분은 옵션들이다. 필요한 부분만 써서 쓸수 있다.

 

예를 들어 OutFileName, OutDir 을 제외하고 확장자, 확장자를 제외한 이름, 드라이브만 확인하고 싶으면 다음과 같이 사용하면 된다.

SplitPath, InputVar , , , OutExtension, OutNameNoExt, OutDrive

 

내가 SplitPath 를 사용하는 실제적인 예를 들어보겠다.

 

Autohotkey 의 SplitPath 명령을 사용해서 clipboard 의 full path 로부터 폴더를 검출하여 clipboard에 저장하는 단축키를 설정한다.

 

#p:: ; 단축키 Win + p

SplitPath, Clipboard, , dir

Clipboard=%dir%

return

 

윈도우에서 사용하는 perl.exe 가 들어 있는 폴더를 탐색기에서 열고 싶을 때 나는 다음과 같은 방법을 사용한다.

 

CMD 에서 which 명령을 통해 perl.exe 파일의 path 를 알아내고 clip 을 파이프라인 해서 clipboard 에 perl.exe 의 full path 를 저장한다.

 

which 명령을 사용하기 위해서는 아래 포스팅에서 소개했던, GOW 를 사용하면 된다.


2012/11/11 - [유틸] - GNU On Windows 를 이용하여 Windows 에서 Linux 명령어 사용하기



위에서 설정한 win+p 단축키를 통해 full path로부터 폴더명만 추려낸다.

 

다음으로 win+r 을 눌러서 실행 창에 ctrl+v 를 해서 붙여 넣는다.

 

그럼 perl.exe 가 들어있는 탐색기가 열린다.

 

오늘의 팁 끝~~




+ Recent posts