日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

『转』度百死去飞秋一个BUG引发的血案

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『转』度百死去飞秋一个BUG引发的血案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作了一篇文章度百死去飛秋一個BUG引發的血案,昨天,度百死去的美國客戶發郵件給我,說我的軟件出問題了,我查來查去,發現居然是服務器上一個目錄無法刪除,一刪除就報 cannot read from the source file or disk. 如果用命令行方式刪除,則報? cannot find the specified path。一開始以為是文件系統遭破壞了,用 chkdsk 命令檢查,沒有發現問題,后來仔細一看,那個不能刪除的目錄名居然以一個空格字符結尾,而我嘗試在資源管理器中創建一個目錄以空格結尾結果資源管理器會自動將末尾的字符刪除,用程序創建,結果也一樣,這個美國佬是怎么創建這個古怪的目錄的?出現這種情況后不但是無法刪除這么簡單,列目錄什么的也會有問題,這樣一來,系統的運行都會有問題,我想到的最壞結果就是可能不得不格式化服務器的硬盤,想到這里我幾乎不敢再想下去了!Research了一天,后來終于找到了解決方案,并且由此還發現問題的起因是我程序上的一個Bug造成,可怕的Bug!

飛秋Windows 的文件系統可以支持特殊字符的文件名,比如以空格結尾,以點號結尾等,有一篇英文的文章說NTFS 支持這些文件名,但FAT不支持,我試了一下,FAT也支持。但飛秋Windows API 卻對這些特殊文件名進行了限制,也就是說,我們通過程序是無法創建一個以空格或點號結尾的文件名或路徑名的。但Copy 和 Move的API 卻不做這方面的限制,這導致我們可以從其他的文件系統拷貝或移動一個特殊文件名的文件到Windows 的文件系統,但一旦在Windows的文件系統上創建成功,就無法通過正常途徑刪除或改名。因為調用API 刪除或改名時,API 會首先進行規則檢查,如果發現不符合規則,則直接忽略。這兩組API 在處理上的不一致,帶來一個非常嚴重的安全問題,可惜微軟到了Windows7 還沒有去彌補這個問題。

下面讓我們用代碼復現這個問題

try
{
string dir = @"C:/Temp/abc";
System.IO.Directory.CreateDirectory(dir); //在C:/Temp 目錄下創建abc 這個目錄
?
string dir1 = @"c:/Temp/Bcd /";
?
System.IO.Directory.Move(dir, dir1); //將ABC 移動到"Bcd "這個目錄去,注意這里 Bcd后面有個空格
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

在運行這段代碼前,你一定要有一點思想準備,因為一旦運行成功,你的 C:/temp 目錄下就有了一個 “Bcd ”這樣的古怪的目錄,而且你用正常的方法根本無法刪除它。如果我在此打住,你一定會為之抓狂。不過沒關系,我已經找到了刪除它的方法,下面就和大家共享:

飛秋Windows 的命令行工具 Del 和 Rd 支持一種方式可以不對輸入文件名的合法性進行檢查,這種方式是在完整目錄名前加一個 //?/

比如

del “//?/C:/Temp/xxx.” 刪除xxx. 這個文件
刪除目錄的話

rd /s “//?/C:/Temp/xxx.” 刪除 xxx. 這個目錄
執行這個命令后,就可以刪除這些古怪的文件了。注意,這里一定要輸入完整的目錄才可以,相對路徑不行。

講到這里,我們知道了原因和解決方案,那么在這里我需要提醒大家我們以后在程序中調用 System.IO.Directory.Move 或者 System.IO.File.Copy , System.IO.File.Move 這些函數前,度百死去一定要注意先判斷一下輸入的目標文件名或目錄名的結尾是不是空格或點號,可能還要判斷其他情況,但目前我只知道這兩種情況,而且結尾是空格非常有隱蔽性。非常郁悶的一篇度百死去飛秋一個BUG引發的血案。

總結

以上是生活随笔為你收集整理的『转』度百死去飞秋一个BUG引发的血案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。