2014-01-17 77 views
27

我發現一個日誌文件的引用是有以下格式的意思是:什麼\。時預先考慮到文件路徑

\\?\C:\Path\path\file.log 

我無法找到的序列什麼參考\ ?\的意思。我相信反斜槓之間的部分是指主機名。

例如,我的Windows計算機上,下面的工作得很好:

dir \\?\C:\ 

而且,只需用同樣的結果罰款:

dir \\.\C:\ 

問題:

  1. 是有關於這個特定路徑格式中問號的含義的參考?
  2. 什麼可能以這種格式生成文件路徑?

回答

26

長時間閱讀,但值得,如果你是在這一領域閱讀:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx

提取物:

Windows API的有很多功能也使用Unicode版本 允許一個延伸型長度路徑的最大總路徑長度爲 32,767個字符。這種類型的路徑由用反斜槓分隔的組件 組成,每個組件由函數(此值通常爲255個字符)中的參數 lpMaximumComponentLength中返回的值組成。要指定 擴展長度路徑,請使用"\\?\"前綴。例如,"\\?\D:\very long path"

和:

"\\?\"前綴也可以與根據 通用命名約定(UNC)構建路徑來使用。要使用 UNC指定這樣的路徑,請使用"\\?\UNC\"前綴。例如,"\\?\UNC\server\share", 其中"server"是計算機的名稱,​​是共享文件夾的名稱 。這些前綴不會用作路徑 本身的一部分。它們表示路徑應該通過最小的修改傳遞給系統 ,這意味着您不能使用正斜槓代表路徑分隔符或用於表示當前目錄的句點,或者用雙點表示父目錄。 由於不能使用"\\?\"前綴和相對路徑,所以相對路徑始終限制爲總共MAX_PATH個字符。

+0

@ michael-burr:感謝您修復引用中的代碼序列:) – fritzone

+0

我已經知道這一段時間了,但今天閱讀這篇文章讓我想知道微軟的理由是需要特殊前綴來表示「讓我給你一條比'MAX_PATH'字符長的路徑「。爲什麼我不通過長度超過MAX_PATH字符的路徑是一個足夠好的指示?我可能不得不將這個問題作爲SO ... –

+0

@MichaelBurr我們正在使用cmake @ windows(在構建它時生成長路徑名,在很多深層目錄中),並且在我的Windows命令行體驗中,如果有任何機會生成的文件路徑比'MAX_PATH'更長,系統會拒絕合作......也許對於這種情況,你需要在'\\?\\'前加上它們。 – fritzone

1

Windows API分析文件I/O的輸入字符串。除此之外,它還將/轉換爲\,作爲將該名稱轉換爲NT樣式名稱,或者解釋...僞目錄的一部分。除了少數例外,Windows API還將路徑名限制爲260個字符。

\\?\前綴的documented宗旨是:

對於文件I/O時,「\\。\?」前綴的路徑字符串告訴的Windows API禁用所有字符串解析,並送直接跟在文件系統上的字符串。

這允許在路徑名中使用的...,以及解除260字符路徑名稱限制,如果底層文件系統支持大路徑和文件名。