热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《C++》C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别

版权声明:本文为博主原创文章,遵循CC4.0by-sa版权协议,转载请附上原文出处链接和本声明。本文链接:https:blo

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/YhL_Leo/article/details/49591019
1 绝对路径与相对路径

绝对路径表示相对容易得多,依次将文件所在盘符文件夹逐级展开就是绝对路径:

ofstream infile(“E:\MyDoc\file.txt”, ios::in);
Mat image = imread(“D:\MyImages\Lena.jpg”);

1
2

这里需要注意的是文件夹与文件夹之间的间隔符要用双斜杠\,C++中默认访问目录是生成工程可执行文件所在的目录,我们记为当前目录,相对路径按照相对于当前目录的位置大致可以分成三种:

读取路径与当前目录同级时,可以直接访问预操作文件名:

infile.open(“file2.txt”, ios::in); // file2.txt in the default directory

1读取路径在当前目录的子目录中时:

// file3.txt in the sub-directory named “SubDirectory” of the default directory
infile.open(".\SubDirectory\file3.txt", ios::in); // “.” means the default directory

// so, for file2.txt also can be:
infile.open(".\file2.txt", ios::in);

1
2
3
4
5读取路径在当前目录的上一级或几级目录(称之为父目录)中时:

// file4.txt in the parent directory named “ParentDirectory” of the default directory
infile.open("…\ParentDirectory\file4.txt", ios::in); // “…” means parent directory
infile.open("…\…\ParentDirectory\file5.txt", ios::in) // file5.txt in the parent directory of file4.txt

1
2
3

2 正斜杠与反斜杠

正斜杠,又称左斜杠,符号是/;反斜杠,也称右斜杠,符号是\。

在Unix/Linux中,路径的分隔采用正斜杠/,比如/home/myDocs;而在Windows中,路径分隔采用反斜杠\,比如C:\Windows\System。

编程时,我们常看到这样的路径写法,C:\Windows\System,也就是用两个反斜杠来分隔路径,事实上,上面这个路径可以用C:/Windows/System来代替,不会出错。但是如果写成了C:\Windows\System,那就可能会出现各种奇怪的错误了。至于上述问题出现的原因,要从字符串解析这方面来分析。学过编程的人都应该知道,C中定义了一些字母前加\来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。根据这个原理,如果想输出双引号(""),就需要输入’"’,这样才会将包含了双引号的字符串正确的写入内存中。那么如果想输入一个反斜杠呢?很简单,只要敲\就可以了。

看到这里或许有些人已经看出眉目了,如果C:\Windows\System这个路径字符串交给C编译器编译,实际写入内存的字符串并没有包含反斜杠\,甚至紧跟在反斜杠后面的字母也一起被转义成了其它的字符,再次调用的话势必会出问题。

字符串解析不仅仅局限于C编译器,Java编译器、一些配置文件的解析、Web服务器等等,都会遇到对字符串进行解析的这个问题,由于传统的Windows采用的是单个斜杠的路径分隔形式,导致在对文件路径进行解析的时候可能发生不必要的错误,所以就出现了用双反斜杠\分隔路径的形式。不管解析引擎是否将反斜杠解析成转义字符,最终在内存中得到的都是\,结果也就不会出问题了。

由此也可以看出Windows或者说DOS在设计初期考虑不够周全,为了和Unix一些特征区别开来,将Unix中的正斜杠/分隔路径方式改变成了反斜杠\。这样改变导致的一个问题就是在早期DOS命令行中,正常的文件名是不能包含空格的,如果包含了空格,会导致输入这样的文件名时,命令解析无法将其和参数区分开。例如,想要进入hutaow yuan这个目录(在此先忽略8.3命名规则),直接输入cd hutaow yuan,命令行会将其解析为进入hutaow目录,而后面的yuan做参数,这显然不是所期望的。

而在Unix中,文件名如果包含空格,可以直接在空格前加上反斜杠\进行转义,从而很好的和命令参数区别出来(参数之间一般使用空格分隔)。还是上面的例子,在Unix中,只要输入cd hutaow\ yuan(在yuan前面的空格前加上),命令行会正确的辨认出hutaow yuan并进入这个目录。当然,现在Windows的后续版本已经使用其它方法(比如文件名用双引号括住)解决了空格问题。

参考资料:

http://blog.csdn.net/sszgg2006/article/details/8447176

————————————————
版权声明:本文为CSDN博主「yhl_leo」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/YhL_Leo/article/details/49591019


推荐阅读
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
  • 深入解析 C 语言与 C++ 之间的差异及关联
    深入解析 C 语言与 C++ 之间的差异及关联 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • Python学习:环境配置与安装指南
    Python作为一种跨平台的编程语言,适用于Windows、Linux和macOS等多种操作系统。为了确保本地已成功安装Python,用户可以通过终端或命令行界面输入`python`或`python3`命令进行验证。此外,建议使用虚拟环境管理工具如`venv`或`conda`,以便更好地隔离不同项目依赖,提高开发效率。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • Python与Java编程语言的主要差异分析:常见疑问解答
    本文对Python与Java编程语言的主要差异进行了深入分析,重点探讨了以下几个方面:1. Python在中文社区的资源相对较少;2. Python的面向对象编程更加简洁直接;3. Java拥有更为丰富的类库支持;4. Java在企业级应用中的广泛使用。通过对比这两种语言的特点,为开发者提供了选择时的参考依据。 ... [详细]
author-avatar
李慧颖yynd_613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有