2013-03-26 27 views
6

我無法通過Google教授找到關於此的任何信息,所以我在這裏。取給定的路徑名​​稱並將其粘貼到Windows資源管理器中。我發現我的代碼中有一個額外的'。'生成路徑的錯誤後,我偶然發現了這一點。在目錄\分離器之前的路徑名稱....NET中有關文件路徑的奇怪行爲

@"C:\\pathto.\file.ext" 

在代碼中,調用File.Create當.NET將接受的路徑和文件將會產生,但在此路徑:

@"C:\\pathto\file.ext" 

C:\\pathto.\file.ext複製到Windows資源管理器的地址欄並觀看'。'。消失,帶你去C:\\pathto\file.ext

它是正常的行爲.NET和Windows它不會造成問題,因爲'。'在傳遞到文件操作時,將被.NET和Windows刪除。真正的問題是數據庫中的所有文件都具有帶'。\'的文件名,但存在於沒有「。\」的路徑中......並且File.Exists()也可以使用,儘管路徑不是「真正的」物理位置...

這是怎麼回事?

+0

首先,你可以使用,例如,使之更容易複製和粘貼路徑。 '@「C:\ Users \ Matt」'格式('逐字字符串文字')。 – 2013-03-26 16:35:23

+0

也許Windows禁止以'.'開頭或結尾的文件名(和文件夾)? – 2013-03-26 16:36:43

+0

是的,這是正常的。嘗試創建一個以完全停止結束的文件夾也是如此。 – TheKingDave 2013-03-26 16:37:49

回答

4

這是Windows文件系統的「特徵」。 MSDN

不要使用空格或句點結束文件或目錄名稱。儘管底層文件系統可能支持這種名稱,但Windows外殼程序和用戶界面不支持。但是,可以將句點指定爲名稱的第一個字符。例如,「.temp」。

0

所有正常的Windows API忽略/刪除時常規路徑在傳遞小圓點在文件/文件夾的名稱。

如果你真的需要尾隨你需要使用"\\?\"前綴路徑和互操作的所有點支持稱自己(因爲.Net不支持這種文件格式)。有關更多信息,請參閱MSDN: Naming Files, Paths, and NamespacesHow to delete a folder that name ended with a dot (".")?You cannot delete a file or a folder on an NTFS file system volume

這裏是展示瞭如何的PInvoke接受長文件路徑功能相關的問題:c# call Win32 API for long file paths?