관리 메뉴

비전늅

FilePath을 string에 저장하기(Slash(/)와 BackSlash(\)의 차이는?) 본문

Computer Languages/C language

FilePath을 string에 저장하기(Slash(/)와 BackSlash(\)의 차이는?)

visionNoob 2018. 2. 15. 16:31

 OpenCV를 쓰다보면 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를 두번 써야 한다는 규칙을 설명해 놓고 있다. 


굳이 만들어본 예제 코드 

  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7. string pathWithSlashs = "../HelloWorld/netFrame";
  8.  
  9. string pathWithBackslashes = "..\HelloWorld\netFrame";
  10.  
  11. string pathWithDoubleBackslashes = "..\HelloWorld\\netFrame";
  12.  
  13. cout << "Path With Slashs : " << "\n" << pathWithSlashs << "\n\n";
  14. cout << "Path With Backslashs : " << "\n" << pathWithBackslashes << "\n\n";
  15. cout << "Path With Double Backslashs : " << "\n" << pathWithDoubleBackslashes << "\n";
  16.  
  17. return 0;
  18. }

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

[1] https://stackoverflow.com/questions/38428561/difference-between-forward-slash-and-backslash-in-file-path 

[2]https://forums.indigorose.com/forum/old-versions/setup-factory-8-0/setup-factory-8-0-faq/23950-why-do-i-have-to-use-double-backslashes-in-code

Comments