Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.039 c
4-1152899610
TWINc
2006-07-14 21:53
2006.11.26
WinProc


15-1162882336
Тульский
2006-11-07 09:52
2006.11.26
С праздником, товарищи!


2-1162985489
Lesorub
2006-11-08 14:31
2006.11.26
Помогите, плз, вопрос о типе TStrings


2-1162987359
Димыч
2006-11-08 15:02
2006.11.26
Поверх всех окон


2-1162882433
zdm
2006-11-07 09:53
2006.11.26
XPManifest





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский