Страница: 1 |
Страница: 1 |
Вопрос: текущая директория "убегает"
Добавлено: 20.06.06 21:59
Автор вопроса: student-uni
Я пишу каждые десять секунд в Аксесс файл.
(Работает Elapsed timer
Создан коннектор OLEDB ну и
connection.open
execute.nonquery
connection.close)
В коннекторе указана база данных без полного пути,
тобишь искать в том же каталоге что и сама прога,
те в рабочем каталоге.
Так вот при открытии окна диалога
"убегает" текущая директория
Делаю
Dim OpenFileDialog1 As New OpenFileDialog
Dim sb As New System.Text.StringBuilder
With OpenFileDialog1
.InitialDirectory = "C:\" 'или текущая
With sb
.Append("*.exe")
.Append("|*.exe")
.Append("|*.com")
.Append("|*.com")
.Append("|*.bat")
.Append("|*.bat")
End With
.Filter = sb.ToString
.RestoreDirectory = True
If .ShowDialog() = DialogResult.OK Then
Return .FileName
End If
Если пользователь начнёт с текущей директори а потом будет просматривать диск - то при попытке установить соединение с базой данных произойдёт ошибка.
И это верно, т.к. полный путь к базе не указан,
а текущая директория изменилась.
Можно конечно:
- получить и прописать полный путь к базе в коннекшн стринг
- остановить таймер на время просмотра пользователем
OpenFileDialog
- изменить текущую директорию и переопределитть коннекшн стринг каждый раз при записи а потом возвращать исходное значение.
Вопрос - как придумает умнее выход из положения
Спасибо
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 21.06.06 00:46
На мой взгляд использование текущей директории - есть дурной тон в программировании, это приводит с непредсказуемым результатам.. и исходя из этого единственно верное решение ты уже дал:
причем делается это только 1 раз при загрузке, сохраняется в глобальной переменной, и используй на протяжении всего времени работы программы.. Что, конкретно, не устраивает тебя в этом решении? Умнее этого уже ничего не придумаешь.. (имхо)
Номер ответа: 2
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #2
Добавлено: 21.06.06 17:02
Пардон,
Путь к базе стоит полный !
(Не посмотрел)
А директория убегает.
Я выкрутился тем что перед открытием OpenFileDialog выставляю булеву переменную
а потом убираю её.
А таймер смотрит, если булева стоит - то он не пишет. Но всё же интересно как же ОpenFileDialog1.InitialDirectory функционирует ?
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 21.06.06 17:42
убери .RestoreDirectory = True ....
Фишка в том, что если в другой программе вызывали этот диалог, то диалогу будет плевать на InitialDirectory и стартовая папка будет та, которую открывали в последний раз в любой из программ..
А в InitialDirectory задается путь на котором открывается диалог...
и убирай свои таймеры и булевы флаги-это лишнее(имхо)