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.pswp.cn/news/458332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458332.shtml
英文地址,請注明出處:http://en.pswp.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;還…