OpenFileDialog держит папку :-(
От: Unforgiver Россия  
Дата: 12.12.06 15:49
Оценка:
Всем привет.
Столкнулся с проблемой:
Создаю диалог открытия файлов


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; — не помогает ...

Что делать ? Помогите пожалуйста

ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Re: OpenFileDialog держит папку :-(
От: vitaly_spb Россия  
Дата: 12.12.06 16:04
Оценка:
U>ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.

Напиши код где ты ты отпускаешь файл (видимо он в самом конце if)
...Ei incumbit probatio, qui dicit, non qui negat...
Re: OpenFileDialog держит папку :-(
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 12.12.06 16:06
Оценка:
Здравствуйте, Unforgiver, Вы писали:

U>ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.


насильно поменяй текущий каталог
... << RSDN@Home 1.2.0 alpha rev. 669>>
Re[2]: OpenFileDialog держит папку :-(
От: Unforgiver Россия  
Дата: 12.12.06 16:08
Оценка:
Здравствуйте, 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
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Re[2]: OpenFileDialog держит папку :-(
От: Unforgiver Россия  
Дата: 12.12.06 16:16
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, Unforgiver, Вы писали:


U>>ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.


OE>насильно поменяй текущий каталог


Менял. Не помогает. Reset() вызывал — не помогает.
Помогает одно — открыть его еще раз, выбрать какой-нибудь файл из ДРУГОЙ папки — первую он отпускает, вторую "лочит" ...
Бьюсь лицом
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Re: OpenFileDialog держит папку :-(
От: stele Россия www.stele.su
Дата: 12.12.06 16:25
Оценка:
Здравствуйте, Unforgiver, Вы писали:

U>Что делать ? Помогите пожалуйста


U>ЗЫ: Файл, к которому я обращаюсь, после чтения "отпускается", его можно удалить/переименовать. Папку целиком — нельзя.


Это поведение свойственно многим программам написанным на разных языках, видимо так задумано. И логика в этом есть — блокируется удаление извне текущего каталога программы.
... <<My edition based on RSDN@Home 1.2.0 alpha rev. 669>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
Re[3]: OpenFileDialog держит папку :-(
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 12.12.06 16:33
Оценка: 3 (1)
Здравствуйте, Unforgiver, Вы писали:

OE>>насильно поменяй текущий каталог

U>Менял. Не помогает. Reset() вызывал — не помогает.

я имею ввиду Directory.SetCurrentDirectory() куда-нибудь в другое место.
... << RSDN@Home 1.2.0 alpha rev. 669>>
Re: OpenFileDialog держит папку :-(
От: _FRED_ Черногория
Дата: 12.12.06 16:42
Оценка:
Здравствуйте, Unforgiver, Вы писали:

U>Столкнулся с проблемой:



  1. RestoreDirectory
  2. Не пустая папка не удалится при вызове Directory.Delete(path);
  3. Вместо тёх точек (...) надо использовать "…" Ellipsis (Alt+0133)
  4. Почему не вызван Dispose
Help will always be given at Hogwarts to those who ask for it.
Re[3]: OpenFileDialog держит папку :-(
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.12.06 17:46
Оценка: +1
Здравствуйте, Unforgiver, Вы писали:

U>
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
Оценка:
Тот код, что ты привел,вообще даже компилироваться не может...
"обвинение в злостном использовании своих гражданских прав" (из реального)
| Мой Brainbench | BookReader 1.1 | Wallpaper Cycler |


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
OpenFileDialog держит папку :-(
От: Аноним  
Дата: 12.12.06 16:49
Оценка:
Твоя проблема

Как видишь, даже в МС нет ответа, кроме глупостей всяких. Это дотнетовский косяк.

А вот "SetCurrentDirectory()" очень даже этот косяк лечит
"обвинение в злостном использовании своих гражданских прав" (из реального)
| Мой Brainbench | BookReader 1.1 | Wallpaper Cycler |


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.