Всем привет.
Столкнулся с проблемой:
Создаю диалог открытия файлов
OpenFileDialog dlgOpen = new OpenFileDialog();
dlgOpen.Filter = "Фильтр...";
dlgOpen.Title = "Заголовок...";
if (dlgOpen.ShowDialog(this) == DialogResult.OK)
{
string path = Path.GetDirectory(dlgOpen.FileName);
// Тут делаю действия, связанные с загрузкой выбранного файла (сериализация)
}
// Пытаюсь удалить папку - не получается !
Directory.Delete (path); // Вот тут возникает ошибка :( "Не могу удалить, файл занят другим приложением"
И вообще, до закрытия программы, а не только формы с диалогом, папка остается заблокированной ...
Пытался сделать и dlgOpen.Dispose(); и dlgOpen = null; — не помогает ...
Что делать ? Помогите пожалуйста
ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Здравствуйте, Unforgiver, Вы писали:
U>ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.
Здравствуйте, vitaly_spb, Вы писали:
U>>ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.
_>Напиши код где ты ты отпускаешь файл (видимо он в самом конце if)
if (...)
{
MyClass mc = MyClass.Load(dlgOpen.FileName); // Статический метод для десериализации
}
// Метод:public static MyClass Load(string fN)
{
MyClass res;
XmlSerializer xS = new XmlSerializer(typeof(MyClass));
StreamReader sR = new StreamReader(fN);
res = (MyClass)xS.Deserialize(sR);
res.path = Path.GetDirectoryName(fN); // Сначала грешил на эту строчку, что в классе запоминается этот путь. Убирал строчку - нифига не меняется.
sR.Close(); // Вот тут файл отпускается, и его можно удалять. Папку, в которой он лежит, удалять по прежнему нельзяreturn res;
}// MyClass Load
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, Unforgiver, Вы писали:
U>>ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.
OE>насильно поменяй текущий каталог
Менял. Не помогает. Reset() вызывал — не помогает.
Помогает одно — открыть его еще раз, выбрать какой-нибудь файл из ДРУГОЙ папки — первую он отпускает, вторую "лочит" ...
Бьюсь лицом
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Здравствуйте, Unforgiver, Вы писали:
U>Что делать ? Помогите пожалуйста
U>ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.
Это поведение свойственно многим программам написанным на разных языках, видимо так задумано. И логика в этом есть — блокируется удаление извне текущего каталога программы.
... <<My edition based on RSDN@Home 1.2.0 alpha rev. 669>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
U>if (...)
U>{
U>MyClass mc = MyClass.Load(dlgOpen.FileName); // Статический метод для десериализации
U>}
U>// Метод:
U>public static MyClass Load(string fN)
U>{
U> MyClass res;
U> XmlSerializer xS = new XmlSerializer(typeof(MyClass));
U> StreamReader sR = new StreamReader(fN);
U> res = (MyClass)xS.Deserialize(sR);
U> res.path = Path.GetDirectoryName(fN); // Сначала грешил на эту строчку, что в классе запоминается этот путь. Убирал строчку - нифига не меняется.
U> sR.Close(); // Вот тут файл отпускается, и его можно удалять. Папку, в которой он лежит, удалять по прежнему нельзя
U> return res;
U>}// MyClass Load
U>
никогда так не пиши! Привыкай писать корректно:
public static MyClass Load(string fN)
{
XmlSerializer xS = new XmlSerializer(typeof(MyClass));
using(StreamReader sR = new StreamReader(fN))
{
MyClass res;
res = (MyClass)xS.Deserialize(sR);
res.path = Path.GetDirectoryName(fN);
return res;
}
}
В твоем коде будут утекать ресурсы если при десериализации возникнет исключение.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
OpenFileDialog держит папку :-(
От:
Аноним
Дата:
12.12.06 16:03
Оценка:
Тот код, что ты привел,вообще даже компилироваться не может...