今天我遇到了一個非常奇怪的C#錯誤。奇怪的C#Directory.GetFiles錯誤
我寫了一個小方法,它應該搜索並處理任何給定目錄中的所有XNA的xnb文件。在大多數計算機上,它工作得很好 - 預計會出現一些情況(XP中有兩個人報告了問題)。
我只能重現此錯誤Win7上一次(和關閉過程中,VC#外)
這裏是方法:
files = Directory.GetFiles("Content\\Textures\\Houses\\Roof");
for (int i = 0; i < files.Length; i++)
{
string path = files[i].Substring(BasicUtils.FindsubString(files[i], "Textures")).Replace(".xnb", "");
roofTextures.Add(DataCenter.AddTexture(DataCenter.Content.Load<Texture2D>(path)));
}
這種方法得到的所有文件給定的目錄,在這種情況下,「內容\紋理\房屋\屋頂」。在這裏出現錯誤:在這個目錄中有三個文件(都帶有.xnb擴展名)。在我的電腦上使用win7(和另外四個使用win7的電腦),這項工作就像它應該的一樣。
但是,當有人用win XP試圖運行這種方法時,操作系統會返回4個文件 - 這三個真正退出的文件,以及上次打開的OpenFileDialog文件(即使文件完全不同的目錄中, Directory.Getfiles就像它在那裏,在那個目錄中那樣回覆它)。
而當我想打開它,該方法不找到該文件,並拋出一個異常。
我能夠通過檢查給定的後退文件是否具有.XNB擴展名來克服這個錯誤,但是這個錯誤真的讓我感到驚訝。
任何想法,我犯了一個錯誤?
在Winform區域中的openfiledialog,而在另一個DLL中搜索和打開文件,完全不同的類,在一個私人的,不可訪問的方法 - 他們甚至不應該以任何方式溝通!我沒有任何想法,我怎麼回到那個文件名。
編輯:
我覺得我沒有做我的問題明確(對不起,那:)。
因此,該方法中的問題:當我使用Directory.GetFiles(...)時,它返回三個真正在目錄中的文件(三個.xnb文件)。但對於某些用戶(使用Windows XP),此方法會返回一個.sbm擴展名(文件類型是我的程序使用),該目錄中包含ISNT。我搜索了相當長的時間,直到我發現:當他們使用Openfiledialog時,這個問題纔會彈出 - 當他們這樣做時,Directory.GetFiles(...)將返回之前打開的文件 - 但實際上它沒有。我能解決這個問題,但仍不知道爲什麼會發生這種情況。我通過MSDN數據庫進行了搜索,但我沒有發現任何有關這樣的錯誤的信息。我試圖重新創建VS內部的bug,希望它能提供一些線索 - 但我無法做到。有一次這個問題也出現在我身上(從win7開始),但是因爲它不在VS之內,所以我無法進行調試。目前只有兩個贏得XP用戶報告,而它的作品適合每個人使用win7。
哦,我再次檢查 - 在該目錄中沒有隱藏文件(特別是以前打開的文件)。只有三個所需的文件裏面。)
編輯2:
這裏是鏈接的問題,並創建問題的步驟:
https://www.dropbox.com/s/4uv1hbvzkhpwprw/House%20Creator%20V2%20With%20error.zip
啓動Housecreator.exe 點擊 「Load」 按鈕。 選擇「郊區房屋1.sbm」
當其加載時,單擊「3D渲染」按鈕。
這是錯誤應該彈出的步驟。該程序將搜索(Content)\ Textures \ Houses \ OuterWall中的「Suburb house 1.sbm」文件(有時主要用於xp用戶,但有時它也適用於我,但僅限於Visual Studio以外) 。
需要XNA框架3.1和.NET 3.5以及試用該程序。只有當用戶使用「加載」選項時纔會彈出錯誤。
編輯3:我在連續三次出錯。給定目錄內沒有額外的文件。現在它再次工作,沒有任何可見的變化O.o
從想法出發,爲什麼會發生這種情況。
編輯4:
我放棄了。我敢肯定,我在某個地方犯了一個錯誤(我不認爲這可能是這個巨大的錯誤,並且沒有人注意到),但無法捕捉到它在哪裏。我過濾文件,這應該工作。謝謝大家的幫助! :)
第一步是如果錯誤來自Directory.GetFiles或來自您自己的代碼,則縮小範圍。看起來你更有可能在「roofTextures」中添加了一些東西,但沒有意識到它。 –
什麼例外和地點?這個fundemental信息如何失蹤?難怪你無法調試! – banging
想說什麼可能會說:「拋出的異常在哪裏?」......可以毫不侮辱地說。 – hometoast