Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.26;
Скачать: CL | DM;

Вниз

Теряются пути...   Найти похожие ветки 

 
Juju   (2006-11-02 14:35) [0]

Задача:
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 выдает ошибку, что не найден путь и архивация не выполняется. Более того - все ссылки где указаны относительные пути - не функционируют.
Такое впечатление, что после работы дилога открытия файла метка на текущий каталог меняется и соответственно относительные пути уже строятся с неправильной точки. Если это так - как вернуть метку на текущий каталог обратно... (если это не глупо звучит)?
Пытался решить:
Где возможно поменял относительные ссылки на абсолютные, но остались такие процедуры где мне необходимо указывать относительный путь!


 
Anatoly Podgoretsky ©   (2006-11-02 14:44) [1]

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


 
Juju   (2006-11-02 15:15) [2]

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 тоже вылетает с ошибкой "не найден путь...".
Может потому что в пути есть пробелы?


 
Desdechado ©   (2006-11-02 15:31) [3]

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


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

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


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

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


 
Desdechado ©   (2006-11-02 16:05) [6]

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


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


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

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


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

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


 
Desdechado ©   (2006-11-02 16:19) [9]

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


 
Anatoly Podgoretsky ©   (2006-11-02 16:53) [10]

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

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


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

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


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

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

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


 
Ketmar ©   (2006-11-02 18:19) [13]

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


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

Вместе с Delphi?


 
Ketmar ©   (2006-11-02 18:23) [15]

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


 
Juju   (2006-11-02 18:45) [16]

А то, что возможно архиватор не куплен - так это лукавство! Не с того начинать надо - хорошо если ОС куплена, потом приобретена Delphi, а потом жадность задавит настолько, что вместо программирования устраиваешься в налоговою полицию и делаешь наезды на офисы в поисках нелицензионного ПО!!! И уже там довольно покрякиваешь посматривая на нелицензионные ВинРары-ВинЗипыи т.д....

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


 
Ketmar ©   (2006-11-02 18:52) [17]

>[16] Juju 2-Nov-2006, 18:45
вопрос был (цитирую): "Решение верно?". если архиватор не куплен -- то неверно на 100%.

>в том, как выполняют подобные задачи другие люди.
покупают софт. или используют свободный (например, наплевав на RAR и взяв 7-zip). а лучше -- вмонтировать lzma-компрессор сразу в программу.


 
Juju   (2006-11-02 19:32) [18]

То что архиватор не куплен - конечно плохо, но в частном случае - это не имеет значения
Ketmar
А вот за идею с lzma и 7Zip - спасибо


 
Ketmar ©   (2006-11-02 19:43) [19]

>[18] Juju 2-Nov-2006, 19:32
>А вот за идею с lzma и 7Zip - спасибо
не за что. трансляция lzma на Delphi есть на странице 7-zip. или на моей -- я там объединил кучу модулей в 2. %-)


 
Juju   (2006-11-04 10:32) [20]

Ketmarlzmadelphi442-410727-src - выкачал, спасибо - буду разбираться.


 
MetalFan_pda   (2006-11-04 11:27) [21]

простите,щаз глупость сморожу)
а системе разве пофиг,что в пути слэши и прямые и обратны? как написнао в [0][1]


 
Anatoly Podgoretsky ©   (2006-11-04 11:41) [22]

Системе не пофиг, это автору пофиг


 
Juju   (2006-11-04 17:11) [23]

Anatoly Podgoretsky

> Системе не пофиг, это автору пофиг

Спасибо за укол.
MetalFan_pda
У автора работает. Думаю что в данном случае:

>системе разве пофиг,что в пути слэши и прямые и обратны?

Сомневающимся - можете протестировать.


 
Ketmar ©   (2006-11-04 23:26) [24]

>[21] MetalFan_pda 4-Nov-2006, 11:27
>а системе разве пофиг
пофиг.


 
Juju   (2006-11-04 23:55) [25]

Ketmar полностью поддерживаю. +1.
Так что на этот раз автору не по... а системе по...


 
Anatoly Podgoretsky ©   (2006-11-05 00:45) [26]

Системе точно пофиг, работать не будет, но системе все равно пофиг.
Это наш человек, но нам пофиг.


 
Juju   (2006-11-05 14:12) [27]

Anatoly Podgoretsky но ведь работает!
(я конечно переписал слеши, но до этого тоже работало).


 
koha ©   (2006-11-05 18:56) [28]

> Juju   (02.11.06 15:15) [2]

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

Да потому, что в пути есть пробелы!
Стакой проблемой я уже тоже сталкивался. В твоем случае этот параметр не канает:
PChar(PATH+"Archive/winrar.exe a "+PATH+"Archive/aaa "+PATH+"DATA/*.mdb")
- то есть функция PChar() не годится.
я использую другой споб и все работает:

var
 AppName: array[0..512] of Char;
 FileName: string;
...................
...................
 FileName: "любой путь";
 StrPCopy(AppName, FileName);
 CreateProcessA(nil,AppName,nil,nil,False,CREATE_NEW_CONSOLE,nil,nil,StartInfo ,ProcInfo);
.....................


После этого у меня консольные программы не теряют пути


 
Джо ©   (2006-11-05 18:58) [29]

Где теряются пути?
Где расходятся дороги?
На рассвете не буди.
И вобще меня трогай...


 
Ketmar ©   (2006-11-05 19:02) [30]

>[28] koha(c) 5-Nov-2006, 18:56
>- то есть функция PChar() не годится.
смени мозги, пожалуйста. и не дезориентируй новичков.


 
koha ©   (2006-11-05 19:14) [31]

может и годится для консольных приложений, но так как-нибудь:
PChar(ExtractShortPathName(trim("C:\Program Files\WinRAR\winrar.exe /? >C:\Program Files\WinRAR\rarhelp.txt"))


 
Virgo_Style ©   (2006-11-05 19:26) [32]

koha ©   (05.11.06 19:14) [31]

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

Конечно, если цель была в этом.


 
koha ©   (2006-11-05 19:35) [33]

Человек должен сего испытать, чтобы понять, что нужно ему, а что не нужно и хорошего держаться.


 
Ketmar ©   (2006-11-05 19:40) [34]

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


 
Juju   (2006-11-06 20:12) [35]

С кавычками я понял...
За альтернативный путь koha спасибо...
В PChar не разочаровался...
Ketmar - отдельное спасибо.



Страницы: 1 вся ветка

Текущий архив: 2006.11.26;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.042 c
15-1162088852
Копир
2006-10-29 05:27
2006.11.26
Здравствуйте мои дорогие друзья!


2-1163000669
PZ
2006-11-08 18:44
2006.11.26
TopRow в DBGrid


3-1158775178
Lexa11_2002
2006-09-20 21:59
2006.11.26
Как сделать лучше структуру данных


2-1163006350
Greenchel
2006-11-08 20:19
2006.11.26
Цвет в RichEdit


15-1162913600
Real
2006-11-07 18:33
2006.11.26
7-ое ноября: С праздником, товарищи!