[Windows] 存取名稱以點或空白結尾的資料夾或檔案所發生的現象

摘要:[Windows] 存取名稱以點或空白結尾的資料夾或檔案所發生的現象

以下所述可以參考這篇您無法刪除 NTFS 檔案系統磁碟區上的檔案或資料夾的原因 6:檔案名稱含有 Win32 名稱區中的無效名稱

如果您使用一般 Win32 語法,開啟檔名結尾有句點或是空格的檔案,在真正的檔案開啟之前,結尾的空格或句點就會被去掉。因此,如果相同資料夾中的兩個檔案分別名為 "AFile.txt" 和 "AFile.txt " (注意:檔名後面有個空格),並且您嘗試使用一般 Win32 呼叫開啟第二個檔案,反而會開啟第一個檔案。同樣地,如果檔案的名稱只是 " " (一個空格字元),並且您嘗試使用一般 Win32 呼叫開啟檔案,反而會開啟檔案的上層資料夾。

首先要建立這種無法正常存取的資料夾或檔案,可以在命令提示字元(CMD)執行指令,下面以建立、刪除資料夾為例:

  • 建立名稱為「...」的資料夾(3個半形點)
    md ".../"
  • 刪除名稱為「...」的資料夾(3個半形點)
    rd ".../"
  • 建立名稱為「 」的資料夾(1個半形空白)
    md " /"
  • 刪除名稱為「 」的資料夾(1個半形空白)
    rd " /"

另外還有很多點跟空白的組合方法,在此就不贅述。

建立好這種資料夾後,點進去會看到上一層目錄的內容,舉例來說如果在「我的文件」裡面建立名稱為「...」的資料夾,那麼點進去所看到的就是「我的文件」的內容,但是在裡面執行檔案的話,則是真正「...」資料夾的內容。下面用圖片舉例說明這個現象:

  1. 在「L:\」建立名稱為「...」的資料夾

     
  2. 建立名稱為「test.txt」的文字檔,內容為「...資料夾」

     
  3. 將「test.txt」移動到「...」資料夾裡面

     
  4. 再建立名稱為「test.txt」的文字檔,內容為「根目錄」

     
  5. 此時點進去「...」資料夾,看到的內容跟「L:\」一樣。再開啟「test.txt」會看到內容為「...資料夾」,表示執行檔案時是正確的路徑「L:\...\test.txt」

     
  6. 如果再點進去「...」資料夾,只會看到一個「test.txt」,開啟這個文字檔的話會出現「系統找不到指定的路徑。」,表示執行檔案的時候是不正確的路徑「L:\...\...\test.txt」

由以上的過程可以發現,第一次點進去「...」資料夾後看到的並不是真正可以執行的,假如上面的步驟3並沒有將檔案移動進去,即「...」資料夾是空的,執行「test.txt」會出現找不到檔案。

在測試的過程中(作業系統為Windows 7 SP1 64位元)我發現一個有趣的事情,如果在桌面上建立名稱為「...」的資料夾(3個半形點),怎麼點都無法打開。

運用這個方法,可以做到簡單的資料隱藏功能,建立「123 」資料夾(結尾有1個半形空白),將要隱藏的資料放進去,之後再建立「123」資料夾,則進入「123 」資料夾(結尾有1個半形空白)時會看到「123」資料夾,其餘現象大致如上圖所示。

文章內容僅提供技術分享,如有錯誤還請不吝指教。