비전늅
FilePath을 string에 저장하기(Slash(/)와 BackSlash(\)의 차이는?) 본문
FilePath을 string에 저장하기(Slash(/)와 BackSlash(\)의 차이는?)
visionNoob 2018. 2. 15. 16:31OpenCV를 쓰다보면 VideoCapture로 내 Local Repository에 있는 동영상을 가져올 때가 있는데
string filePath;
과 같이 선언해 놓고, 내 동영상 경로를 탐색기 경로에서 복사해서 코드로 바로 가져오면
filePath = "C:\sample.avi"
파일 경로를 제대로 읽지 못하는 불상사가 생긴다.
이를 해결하기 위해서는
filePath = "C:\\sample.avi"
of
filePath = "C:/sample.avi"
path 사이의 separator를 backslash에서 slash(/)로 바꿔주거나, doublebackslash(\\)로 바꿔주면 경로가 정상적으로 작동한다.
다시 말하면 string형 변수 filePath에 내가 원했던 바로 그 경로("C:\sample.avi" )가 그제서야 비로소 제대로 저장된다.
우선, windows platform에서 filepath separator로 slash(/)와 backslash(\)를 둘다 지원하는 것은 사실이다. 이 둘의 역사에 대해서는 또
다른 얘기기기 때문에 [1]를 참고.
C:\sample.avi 자체는 크게 문제가 없으나, 저 character stream 이 string 변수에 들어가고 부터가 문제이다. 왜냐면 C++에서 backslash는
'escape character' 이기 때문이다[2]. \n \t에서는 용도를 생각보면 되겠다.
사실 대부분의 기초 C/C++ 문법책에 backslash를 출력하기 위해서는 backslash를 두번 써야 한다는 규칙을 설명해 놓고 있다.
굳이 만들어본 예제 코드
#include <iostream> #include <string> using namespace std; int main() { string pathWithSlashs = "../HelloWorld/netFrame"; string pathWithBackslashes = "..\HelloWorld\netFrame"; string pathWithDoubleBackslashes = "..\HelloWorld\\netFrame"; cout << "Path With Slashs : " << "\n" << pathWithSlashs << "\n\n"; cout << "Path With Backslashs : " << "\n" << pathWithBackslashes << "\n\n"; cout << "Path With Double Backslashs : " << "\n" << pathWithDoubleBackslashes << "\n"; return 0; }
Code Highlighter에서도 \netFrame(line 9)에서 \n만 색이 다른 것을 알 수 있다.
출력은 아래와 같다.
Path With Slashs :
../HelloWorld/netFrame
Path With Backslashs :
..HelloWorld
etFrame
Path With Double Backslashs :
..HelloWorld\netFrame
slash의 경우는 문제없이 나오고
single backslash의 경우 netFrame의 n와 그 앞의 backslash가 만나 줄바꿈문자 \n로 인식되는것을 볼 수 있다.
아무튼 결론은
backslash쓸때 조심하자.
References
'Computer Languages > C language' 카테고리의 다른 글
[C언어] 형식지정자 float은 %f인데 integer는왜 %d일까 (0) | 2017.11.23 |
---|