嘗試將從二進制文件讀取的元素添加到BindingList<Type>
時,出現了一個奇怪的問題。這是錯誤的一段代碼:將元素從一個列表添加到另一個列表時發生IOException
BindingList<Type> tmpList = null;
using (FileStream serializedListStream = File.OpenRead(_kReificableDroidsListPath))
{
BinaryFormatter serializer = new BinaryFormatter();
//Temporary list so that ListChanged event is fired
//upon adding new types
tmpList = serializer.Deserialize(serializedListStream) as BindingList<Type>;
foreach (Type droidType in tmpList)
{
ReificableDroids.Add(droidType);
}
}
Visual Studio調試器告訴我這個異常:
System.IO.IOException: The process cannot access the file 'C:\Users\Zoneur\documents\visual studio 2012\Projects\Droid TP1\Droid TP2\bin\Debug\reificable_droids_list.bin' because it is being used by another process.
我的理解是,該文件需要被關閉,所以我把我的foreach
環出了using
聲明,像這樣的:
BindingList<Type> tmpList = null;
using (FileStream serializedListStream = File.OpenRead(_kReificableDroidsListPath))
{
BinaryFormatter serializer = new BinaryFormatter();
//Temporary list so that ListChanged event is fired
//upon adding new types
tmpList = serializer.Deserialize(serializedListStream) as BindingList<Type>;
}
foreach (Type droidType in tmpList)
{
ReificableDroids.Add(droidType);
}
唯一的例外是不再拋出,但我不能明白什麼是問題... ReificableDroids
是類型BindingList<Type>
的財產。
而且,如果我把我的using
聲明foreach
循環,只打印類型名稱這樣的控制檯:
foreach (Type droidType in tmpList)
{
Console.WriteLine(droidType.GetType().ToString());
}
也不例外要麼拋出。
有誰知道什麼可能會導致此使用聲明中引發此異常嗎?
您是否在代碼邏輯中創建了'_kReificableDroidsListPath'文件?我無法重現該問題。 – 2013-02-19 13:23:00
該文件存在於我的磁盤上並在早期創建。另外,如果找不到文件,我會處理異常 – Zoneur 2013-02-19 13:41:39