• OpenCV4学习笔记(2.1)Windows系统的文件路径表示法 | ./、../、/、~的作用 | /、//、、\等之间的区别 | 字符串的原始字面量R"(...)"


    学习OpenCV的过程中,需要读取或者保存图像时,肯定会用到图像的绝对路径或者相对路径。路径这一块很混乱、很复杂,这次主要说一说Windows系统下的文件路径表示方法。

    主要内容

    • Windows系统下(CMD和PowerShell)常用的文件路径表示法。

    • 文件路径中使用斜杠/、多斜杠//、反斜杠、多反斜杠的注意事项。

    • 文件路径中./、../、/、~的含义。

    绝对路径与相对路径

    绝对路径是完整路径,是指向文件系统中某个固定位置的路径,不会因为当前工作路径的改变而改变。

    相对路径是相对当前工作目录的路径,无需提供完整的绝对路径,文件名称就是一个相对路径。

    单斜杠/、多斜杠//、单反斜杠、多反斜杠的作用

    多斜杠、多反斜杠包括双斜杠和双反斜杠。

    普通字符串中,单反斜杠不能作为文件路径的分隔符。

    在描述文件路径时,单斜杠与多斜杠的作用是一样的,而且可以在一个文件路径字符串中混合使用,这里以文件的绝对路径为例:

    String imageName("E:///VS2019//OpenCvPrj/ConsoleApplication1/ConsoleApplication1/rubberwhale1.png"); // 合法
    

    在C++中反斜杠的作用是比较特殊的(在此先不作展开),所以最好不要使用反斜杠来描述文件路径。

    从文件资源管理器复制下来的路径都是用反斜杠分隔的,要是全部修改成斜杠难免有些麻烦,现在有两个办法解决这个问题:

    1. 将所有的单反斜杠改成多反斜杠,也就是转义后能够得到反斜杠,可以解决字符串错误的续行问题。

    2. 如果使用的是C++11及以上标准的C++语言,那么可以尝试使用该标准新加入的特性——字符串的原始字面量,来解决字符串错误的的转义和续行问题。

      对于这种字符串,编译器将不会对其中的转义字符进行转义或者任何其他操作,将保留字符串的原始值。

    按照下面的语法,将原字符串改写成转义反斜杠和字符串的原始字面量均可。

    String imageName("E:VS2019OpenCvPrjConsoleApplication1ConsoleApplication1
    ubberwhale1.png"); // 非法
    
    String imageName("E:\VS2019\OpenCvPrj\\ConsoleApplication1\ConsoleApplication1\rubberwhale1.png"); // 转义反斜杠 合法
    
    String imageName(R"(E:VS2019OpenCvPrjConsoleApplication1ConsoleApplication1
    ubberwhale1.png)"); // 字符串的原始字面量 合法
    

    改写后的字符串,仍然可以混合使用斜杠、多斜杠、多反斜杠作为分隔符。

    ./、../、/、~的作用

    只讨论斜杠在普通字符串中的情况,反斜杠同样存在上面的问题,不在进行讨论。

    ./:表示当前工作目录。

    ../:表示当前工作目录的上层目录(父目录),可以不断叠加,../../为二级父目录,依此类推。

    /:表示当前盘符的根目录

    ~:在PowerShell中表示家目录,默认为C:/User/username。

    D盘根目录下中存在如下文件路径结构:

    ├─ father

    │ └── current

    │ ├── main.cpp

    │ └── 1.jpg

    │ └── source

    ​ └── 2.jpg

    main.cpp是当前编写的代码文件,我们希望程序能够读取1.jpg和2.jpg。

    • 1.jpg的文件路径:

      "1.jpg" // 使用文件名作为相对路径
      "./1.jpg" // 使用./表示当前目录
      "/father/current/1.jpg" // 使用/表示当前盘符的根目录
      "../current/1.jpg" // 使用../表示当前目录的父目录(上级目录)
      "D:/father/current/1.jpg" // 使用绝对路径
      
    • 2.jpg的文件路径:

      "../source/2.jpg" // 使用../表示当前目录的父目录
      "/father/source/2.jpg" // 使用/表示当前盘符的根目录
      "D:/father/source/2.jpg" // 使用绝对路径
      

    参考网站

  • 相关阅读:
    requirejs实现对动态combo的支持
    遇见Javascript类型数组(Typed Array)
    【转发】2012年HTML5的14个大胆预言
    跟我学canvas(三,应用图像)
    贡献一个连jquery都觉的大的时候可以用的 js库
    websocket终成标准
    Django中的form不足之处
    Eclipse+Pydev 开发Django中的Debug模式
    Javascript中指定周末日期的计算
    Python中递归的最大次数
  • 原文地址:https://www.cnblogs.com/LYT-Dveloper/p/13526576.html
Copyright © 2020-2023  润新知