Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Теряются пути... [D7, WinXP]


Страницы:   1 2

Juju ©   (2006-11-02 14:35:00) 

Задача:
1) Архивировать файлы базы данных.
Папка с файлами DATA
Папка с архиватором (winrar) и куда надо ложить полученный архив ARCHIVE
На самом деле задача проста и выполняется.
CreateProcessA(nil,'Archive/winrar.exe a Archive/aaa DATA/*.mdb',nil,nil,False,CREATE_NEW_CONSOLE,nil,nil,StartInfo ,ProcInfo);( с относительными путями...)
2) Менять файл базы данных налету в программе.
Здесь тоже проблем не возникает. С помощью TFileNameEdit (компонента из библиотеки RX) выбираю файл, меняю его в ConnectionString(ADOConnection) и все отлично работает.
Проблема:
Вышеописанная процедура архивирования работает прекрасно, но до того момента пока не выполнена смена БД. После этого WinRar выдает ошибку, что не найден путь и архивация не выполняется. Более того - все ссылки где указаны относительные пути - не функционируют.
Такое впечатление, что после работы дилога открытия файла метка на текущий каталог меняется и соответственно относительные пути уже строятся с неправильной точки. Если это так - как вернуть метку на текущий каталог обратно... (если это не глупо звучит)?
Пытался решить:
Где возможно поменял относительные ссылки на абсолютные, но остались такие процедуры где мне необходимо указывать относительный путь!


Ketmar   (2006-11-02 18:23:00) [21]

>[14] Juju 2-Nov-2006, 18:21
>Вместе с Delphi?
можно и отдельно.


Juju   (2006-11-02 18:21:00) [22]

Вместе с Delphi?


Ketmar   (2006-11-02 18:19:00) [23]

>[12] Juju 2-Nov-2006, 18:05
> Решение верно?
а ты winRAR купил?


Juju   (2006-11-02 18:05:00) [24]

Если затронуть необходимость архивирования...

Стоит задача архивировать в rar-архивы. Но при этом WinRAR не установлен в системе. Я принял решение в папке программы ложить winrar и именно им и производить архивирование.
Решение верно?


Desdechado   (2006-11-02 17:05:00) [25]

Desdechado ©   (02.11.06 16:19) [9]
> Н удумаю,
Н едумаю, ...


Anatoly Podgoretsky   (2006-11-02 16:53:00) [26]

> Juju  (02.11.2006 16:17:08)  [8]

Поскольку задача архивировать, значит решение в относительных путях. Только
не забудь установить базовый путь. Только тут речь идет не о твоем
приложении, а об внешнем, а у него свои представления какой путь текущий, он
вообще запускается вне твоего контента. Проще написать бат файл.


Desdechado   (2006-11-02 16:19:00) [27]

> Ну да, если стоит задача нажить геморрой, то ни о каких абсолютных путях не может быть и речи.
Ну думаю, что создавать архивы с абсолютными путями - хорошая идея. Здесь как раз относительные рулят.


Juju   (2006-11-02 16:17:00) [28]

Понятно... значит решение - абсолютные пути.
Всем спасибо за участие и помощь!


Плохиш   (2006-11-02 16:11:00) [29]


> > все-таки лучше пользоваться абсолютными путями?
> зависит от задачи

Ну да, если стоит задача нажить геморрой, то ни о каких абсолютных путях не может быть и речи.


Desdechado   (2006-11-02 16:05:00) [30]

> все-таки лучше пользоваться абсолютными путями?
зависит от задачи


Juju   (2006-11-02 15:59:00) [31]

DesdechadoСпасибо большое...
Я думал что диалог должен "возвращать на место" первоначальный каталог после завершения операции. Но SetCurrentDir - это именно то, что я искал. Единственное, что насторожило:
> если очень нужно...- т.е. все-таки лучше пользоваться абсолютными путями?
ПлохишЯ догадался :-) , но за помощь спасибо большое!


Плохиш   (2006-11-02 15:32:00) [32]

Пути с пробелами в командных строках надо заключать в ковычки.


Desdechado   (2006-11-02 15:31:00) [33]

Помни, что текущая папка винды может меняться от разных манипуляций, например, от вызова диалогов работы с файлами или других программ.
Поэтому, если очень нужно, то ее можно возвращать принудительно туда, где она нужна, функцией SetCurrentDir


Juju   (2006-11-02 15:15:00) [34]

var PATH:String;
...
PATH := ExtractFilePath(Application.ExeName);
CreateProcessA(nil,PChar(PATH+'Archive/winrar.exe a '+PATH+'Archive/aaa '+PATH+'DATA/*.mdb'),nil,nil,False,CREATE_NEW_CONSOLE,nil,nil,StartInfo ,ProcInfo);

Дело в том, что при указании абсолютного пути в процедуре архивирования WinRar тоже вылетает с ошибкой "не найден путь...".
Может потому что в пути есть пробелы?


Anatoly Podgoretsky   (2006-11-02 14:44:00) [35]

Все таки абсолютные пути и я не знаю таких мест, где бы это не работало, кроме того из абсолютного пути всегда можно сделать относительный.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо