C++中相对路径与绝对路径以及斜杠与反斜杠的区别 及 处理代码

转载自:http://blog.csdn.net/sszgg2006/article/details/8447176

文件路径正斜杠和反斜杠

正斜杠,又称左斜杠,符号是"/";反斜杠,也称右斜杠,符号是"\"。文件路径的表示可以分为绝对路径和相对路径:

1、绝对路径表示相对容易,例如

pDummyFile =fopen("D:\\vctest\\glTexture\\texture\\dummy.bmp", "rb");给出了从盘符开始的全部路径,这里需要注意的是“\”要用双斜线"\\",vc工程默认访问的目录是工程目录,相对路径有以下多种形式,如:pDummyFile = fopen("dummy.bmp", "rb"); bmp文件就在vc工程目录下,和dsw文件同属一个目录。
pDummyFile = fopen("..\\texture\\dummy.bmp", "rb"); 表示bmp文件在工程目录的同级目录texture中,因此路径是先退出工程目录再进入texture目录访问到bmp文件。“..”表示退到当前目录的上一级目录(父目录)
    pDummyFile =fopen(".\\texture\\dummy.bmp", "rb"); 表示bmp文件就在工程目录的子目录texture中,“.”表示当前默认目录,即vc工程目录,然后在进入其子目录texture访问到文件

注意,对相对路径而言,路径表示中的“\”也要用双斜线"\\",

c++中\\是一种转义字符,他表示一个\,就像\n表示回车一样。

所以C++中的路径名:

D:\matcom45\doc\users\_themes\m.dat

应为:

CString filename=_T("D:\\matcom45\\doc\\users\\_themes\\m.dat");

CStringfilename=_T("D:/matcom45/doc/users/_themes/m.dat");
"./"加不加都一样,就是指当前目录

"../"表示当前目录的上级目录,即当前的父目录。

 

在Unix/Linux中,路径的分隔采用正斜杠"/",比如"/home/hutaow";而在Windows中,路径分隔采用反斜杠"\",比如"C:\Windows\System"。
  有时我们会看到这样的路径写法,"C:\\Windows\\System",也就是用两个反斜杠来分隔路径,这种写法在网络应用或编程中经常看到,事实上,上面这个路径可以用"C:/Windows/System"来代替,不会出错。但是如果写成了"C:\Windows\System",那就可能会出现各种奇怪的错误了。至于上述问题出现的原因,要从字符串解析这方面来分析。学过编程的人都应该知道,在C里面,输出字符串时,如果想输出一个换行,那就要加上'\n'这个标志,类似的,输出一个TAB,就加上'\t',也就是说,反斜杠("\")这个符号会把跟在它后面的字符结合起来转义成其它字符。根据这个原理,如果想输出双引号('"'),就需要输入'\"',这样才会将包含了双引号的字符串正确的写入内存中。那么如果想输入一个反斜杠呢?很简单,只要敲'\\'就可以了。
  看到这里或许有些人已经看出眉目了,如果"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的后续版本已经使用其它方法(比如文件名用双引号括住)解决了空格问题。

-------------------------------------------------

C#:

using System;
namespace HelloWorldApplication
{class HelloWorld{static void Main(string[] args){/* 我的第一个 C# 程序*/string AA = "aa\\bb\\cc\\";string kk = AA.Replace("\\","/");Console.WriteLine(AA);Console.WriteLine(kk);Console.ReadKey();}}
输出:
aa\bb\cc\
aa/bb/cc/
==============================================

C++

#include <iostream>   
#include <string>  
using namespace std;   int main()  
{  string::size_type pos=0;  string test="fsffsfd\\fdsfsfd\\fdsfsd";  cout<<test<<endl;  while((pos=test.find('\\',pos))!=string::npos)  {  test.insert(pos,"\\");//插入  pos=pos+2;  }  cout<<test<<endl;  return 0;  
}
fsffsfd\fdsfsfd\fdsfsd
fsffsfd\\fdsfsfd\\fdsfsd



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01参考资料

《Visual C#经典游戏编程开发》 目标&#xff1a; 掌握小游戏开发的思路&#xff0c;在实际开发过程中&#xff0c;思考实践面向对象&#xff0c;为cocos2d-x开发打下基础转载于:https://www.cnblogs.com/sharpfeng/p/5181260.html

WPF的二维绘图(一)——DrawingContext

DrawingContext比较类似WinForm中的Graphics 类&#xff0c;是基础的绘图对象&#xff0c;用于绘制各种图形&#xff0c;它主要API有如下几种&#xff1a; 绘图API 绘图API一般形为DrawingXXX系列&#xff0c;常用的基础的绘图API有&#xff1a; DrawEllipseDrawGeometryDrawG…

Windows系统编程之进程间通信

Windows系统编程之进程间通信作者&#xff1a;北极星2003来源&#xff1a;看雪论坛&#xff08;www.pediy.com&#xff09;Windows 的IPC&#xff08;进程间通信&#xff09;机制主要是异步管道和命名管道。&#xff08;至于其他的IPC方式&#xff0c;例如内存映射、邮槽等这里…

前端知识体系收藏

1. 布局框架&#xff1a; Bootstrap: http://getbootstrap.com/ Foundation: http://foundation.zurb.com/ Uikit: http://www.getuikit.com/ Web Components:http://css-tricks.com/modular-future-web-components// 2. 构建工具及包管理器&#xff1a; Grunt: http://gruntjs…

20分钟快速了解Redis

Redis可以说是目前最火爆的NoSQL数据库&#xff01; 过去几年&#xff0c;Memcached很盛行&#xff0c;现在有很多公司已将Memcached替换成了Redis。当然&#xff0c;很多人替换并不清楚为什么&#xff0c;只是感觉不想让主流抛弃&#xff0c;这也充分反映了目前Redis的强势。 …

进程通信例子

from&#xff1a;https://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.beginoutputreadline(vvs.80).aspx?cs-save-lang1&cs-langcsharp#code-snippet-4备注可同步或异步读取 StandardOutput 流。Read、ReadLine 和 ReadToEnd 等方法对进程的输出流执行…

IDEA15 下运行Scala遇到问题以及解决办法

为了让Scala运行起来还是很麻烦&#xff0c;为了大家方便&#xff0c;还是记录下来&#xff1a; 1、首先我下载的是IDEA的社区版本&#xff0c;版本号为15. 2、下载安装scala插件&#xff1a; 2.1 进入设置菜单。 2.2 点击安装JetBrains plugin 2.3 输入scala查询插件&#xff…

通过扫码自定义链接安装iOS app,版本更新总结。

1、打包ipa&#xff0c;plist工具&#xff1a;xcode6证书&#xff1a;企业级开发证书 1.1&#xff09;xcode6开始企业级打包时不在生成plist&#xff0c;需要自己编写&#xff1a;模版见下&#xff1a; <?xml version"1.0" encoding"UTF-8"?><!…

安排与愿想

机器学习的理论学了好久了&#xff0c;对于回归&#xff0c;分类&#xff0c;聚类&#xff0c;数据的预处理的各种算法也有了深刻认识&#xff1b; 但纸上谈兵&#xff0c;没有意义&#xff1b; 从今天开始用起来吧&#xff0c;把各种算法的实践以及思路记录下来&#xff0c;附…

pdf破解版

网页说明http://aikongke.com/3754.html1118-1805-7284-0295-8107-3663您好 亲 看到您拍的宝贝了&#xff01; 链接&#xff1a;http://pan.baidu.com/s/1c0iE44C 密码&#xff1a;bnyc XI版转载于:https://www.cnblogs.com/computerMatainance/p/5192834.html

使用try-with-resources替代try finally释放资源

2019独角兽企业重金招聘Python工程师标准>>> 1、旧社会 Java里&#xff0c;对于文件操作IO流、数据库连接等开销非常昂贵的资源&#xff0c;用完之后必须及时通过close方法将其关闭&#xff0c;否则资源会一直处于打开状态&#xff0c;直至程序停止&#xff0c;增加…

MFC模态对话框和非模态对话框

MFC中对话框有两种形式&#xff0c;一个是模态对话框&#xff08;model dialog box&#xff09;&#xff0c;一个是非模态对话框&#xff08;modeless dialog box&#xff09;。一、模态对话框&#xff08;model dialog box&#xff09;在程序运行的过程中&#xff0c;若出现了…

平板电脑离寿终正寝还有多远?

近期有评论称&#xff0c;因为大尺寸智能手机越来越普及&#xff0c;小尺寸平板正遭受着越来越严重的冲击&#xff0c;在这样的背景下&#xff0c;平板厂商也纷纷转攻超大尺寸平板市场&#xff0c;以此避开大尺寸智能手机的竞争&#xff0c;只是。这样的策略转变是否能扭转平板…

Swift 与 JSON 数据

转载自&#xff1a; http://www.cnblogs.com/theswiftworld/p/4660177.html 我们大家平时在开发 App 的时候&#xff0c;相信接触最多的就是 JSON 数据了。只要你的 App 有读取网络数据的功能&#xff0c;你就免不了要与 JSON 打交道。比如你做一个新闻 App&#xff0c;你要读取…

TeamViewer - 最好用强大的免费跨平台远程桌面控制软件 (支持电脑和手机)

from&#xff1a;很早以前 LYcHEE 就提到过&#xff0c;家中的潮人爷爷奶奶每天摆弄着电脑&#xff0c;看看新闻发发邮件&#xff0c;安享晚年生活。只是意料之中的&#xff0c;电脑上莫名出现各种问题&#xff1f;不翼而飞的图标&#xff1f;照片又忘记怎么导出了&#xff1f;…

【设计模式】7、桥接模式

桥接模式就是对一个类的方法进行抽象化&#xff0c;吧不相关的因素提取出来&#xff0c;发展出第二个类 1 package com.shejimoshi.structural.Bridge;2 3 4 /**5 * 功能&#xff1a;桥接模式使用6 * 意图&#xff1a;将抽象部分与它的实现部分分离&#xff0c;使他们都…

hadoop HA 之 QJM

前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理&#xff0c;所有的步骤都是通过自己实际测试。文档的结构也是根据自己的实际情况而定&#xff0c;同时也会加入自己在实际过程遇到的问题。搭建环境过程不重要&#xff0c;重要点在于搭建过程中遇到的问题&#xff0c;解…

TeamViewer免费版和付费版有什么不同

提到远程控制软件 TeamViewer无疑是目前业内知名度比较高的一款&#xff0c;所以说到远程控制软件可能大部分人首先想到的就是TeamViewer。在使用功能上&#xff0c;它支持远程桌面控制、文件传输、远程计算机锁定、视频会话、主控方和被控方身份互换&#xff0c;远程管理无人执…

iOS-关于cell的重叠问题

记得很早之前遇到过一个问题&#xff0c;关于cell的重叠问题&#xff0c;现在回顾总结一下。 iOS中tableview的cell显示是会消耗内存的&#xff0c;如果要显示无数个cell&#xff0c;不可能把每个cell都存储下来&#xff0c;为了解决这个问题&#xff0c;cell就用了重用机制&am…

每天一个Linux命令-ls

ls 命令在linux系统中是使用频率最频繁的几个命令之一,直接使用不带目录名&#xff0c;是默认显示当前目录的文件及子目录名称&#xff0c;ls加指定目录名&#xff0c;则可以查看指定目录下的文件及子目录名称&#xff0c;ls不仅可以查看目录下有哪些文件和子目录&#xff0c;还…