1. 程式人生 > >MFC寫路徑問題

MFC寫路徑問題

寫絕對路徑
	IDR_MAINFRAME_256       BITMAP                  "C:\\Users\\Administrator\\Desktop\\軟體開發C++\\第四個題目\\test2_finish\\test2\\res\\Toolbar256.bmp"
寫相對路徑
IDR_MAINFRAME_256       BITMAP                  "res\\Toolbar256.bmp"

在相對路徑中res是表示是現在這個專案中圖片所在資料夾的上一級,而res這個資料夾是資源管理器所在資料夾的名稱。

相對路徑

imgSrc = imread("./自適應/1.jpg");
imread函式中,一個點代表省略當前資料夾目錄,兩個點則代表回到上一個資料夾目錄。

"\\" 是Windows的目錄分割符。
"//"是Linux的目錄分割符
//一般用於網路協議中,比如最常用的HTTP://就是超文字傳輸協議,//一般都用協議名+冒號+//表示,如FTP:// MMS://等等。
\\一般用於區域網中計算機之間的互訪,也就是說它後面加一個IP或者機器名,可以訪問另一臺機器。
在WINDOWS裡面很多情況下/和\是可以通用的,也就是說不管你輸什麼都可以達到相同的目的,尤其是在位址列中。但是,正規的地址表示還是應該用/,比如C:/WINDOWS等。
\一般在WINDOWS中比較少用。
/為一般字元,可以用作目錄/dir ,也可用作兩個數相除
\是轉移字元,如\n為換行,想輸出\、“、%這樣的字元,這個可以用\\、\" 放在前面,兩個這樣便可以。
"./" 加不加都一樣,就是指當前目錄
"../" 表示當前目錄的上級目錄,即當前的父目錄。

C++中相對路徑與絕對路徑以及斜槓與反斜槓的區別 - Guo_guo - CSDN部落格
有時我們會看到這樣的路徑寫法,“C:\Windows\System”,也就是用兩個反斜槓來分隔路徑,這種寫法在網路應用或程式設計中經常看到,事實上,上面這個路徑可以用"C:/Windows/System"來代替,不會出錯。但是如果寫成了"C:\Windows\System",那就可能會出現各種奇怪的錯誤了。至於上述問題出現的原因,要從字串解析這方面來分析。學過程式設計的人都應該知道,在C裡面,輸出字串時,如果想輸出一個換行,那就要加上’\n’這個標誌,類似的,輸出一個TAB,就加上’\t’,也就是說,反斜槓("")這個符號會把跟在它後面的字元結合起來轉義成其它字元。根據這個原理,如果想輸出雙引號(’"’),就需要輸入’"’,這樣才會將包含了雙引號的字串正確的寫入記憶體中。那麼如果想輸入一個反斜槓呢?很簡單,只要敲’\'就可以了。
  看到這裡或許有些人已經看出眉目了,如果"C:\Windows\System"這個路徑字串交給C編譯器編譯,實際寫入記憶體的字串並沒有包含反斜槓"",甚至緊跟在反斜槓後面的字母也一起被轉義成了其它的字元,再次呼叫的話勢必會出問題。

這幾個符號應該要區分清楚,上面說到的/\通用的問題並不適用於所有程式,尤其當涉及到指令碼、程式設計等時一定要區別開。正則表示式中這兩個符號的意義也是不同的。

但是現在在VC2013使用時有些作用都是表示資料夾分隔符,其他情況下就不瞭解。

#define BASE_ASSERT(bf) \
{ \
if(!(bf)) \
{ \
printf("Assert failed at line %d of file %s\n", \
__LINE__,THIS_FILE); \
exit(0); \
} \
}
C++在這裡\是行連續的意思,有這個符號,就是下一行是接著上一行的意思,就是下一行和上一行從語法上來說是一行,只是分成了多行來寫。連線2行的意思

得到系統檔案的絕對路徑:

CString GetSysPath(void)
{
TCHAR exeFullPath[MAX_PATH];
GetModuleFileName(NULL,exeFullPath, MAX_PATH);
CString szfolder = exeFullPath;
int pos = szfolder.ReverseFind(’\’);
szfolder = szfolder.Left(pos+1);
return szfolder;
}
CString szFile=GetSysPath();