Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2013, 08:13   #21
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Devolarium
Верно. Если ты хочешь чтоб данные хранились рядом с экзешником, то да. Если же хочешь разделения (у каждого юзера на своих рабстолах лежат ярлыки на твою прогу с указанием разных рабочих каталогов) то абсолютные пути тут будут только мешать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2013, 10:37   #22
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Ну и, стесняюсь спросить, зачем это делать?
Я же не сказал что везде применять где попало.
Подсказка: код может не находится под твоим контролем. Это может быть сторонний код.

Цитата:
Вопрос лишь в том, насколько это удобно.
Но вопрос удобства вряд ли можно считать абсолютным правилом.
Давайте подытожим.

1. Я привёл конкретный пример, почему не нужно использовать в программах относительные пути. Потому что они не работают в современном мире ("работают часто" это равно "работают, благодаря случайности" - т.е. "не работают").
2. Сам MSDN говорит: ребята, не надо это использовать.

Мне в ответ вы говорите: ну их же удобно использовать. И на всякий случай добавляете: "в некоторых случаях". Как будто эти "некоторые случаи" вас волшебным образом защитят от фундаментальных недостатков относительных путей.

Это замечательная аргументация. Мне удобно забивать гвозди отвёрткой, но это не делает это правильным.

Цитата:
Сообщение от Devolarium Посмотреть сообщение
я хотя бы в правильном направлении мыслю?
Я рекомендовал бы прочитать вот эти две статьи:

http://www.gunsmoker.ru/2011/10/pascal.html
http://www.gunsmoker.ru/2011/09/blog-post_10.html

Цитата:
абсолютные пути тут будут только мешать
Я всё же настаиваю, чтобы вы (s-andriano или Stilet) привели бы конкретный пример.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 02.04.2013, 15:22   #23
Devolarium
Форумчанин
 
Регистрация: 05.12.2011
Сообщений: 102
По умолчанию

Код:
ShowMessage(ExtractFilePath(ParamStr(0)));
- выдает D:\Program Files(x86)\Heilpraktiker
Код:
CreateDir(ExtractFilePath(ParamStr(0))+'HP\Demo\');
- Создает папку в D:\Users\IGentlich\AppData\Local\Vi rtualStore\Program Files(x86)\Heilpraktiker
Код:
AssignFile(TF[1], ExtractFilePath(ParamStr(0))+'HP\Demo\1.Ini');
Создает файл там же

Хотя из делфи все работает просто идеально и создается там где нужно

Бред...
Devolarium вне форума Ответить с цитированием
Старый 02.04.2013, 17:53   #24
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

прога не имеет админских прав, вот и не позволяют менять файлы там, кстати правильно делают.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.04.2013, 19:27   #25
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
1. Я привёл конкретный пример, почему не нужно использовать в программах относительные пути. Потому что они не работают в современном мире ("работают часто" это равно "работают, благодаря случайности" - т.е. "не работают").
Хорошо, процитирую Ваше сообщение:
Цитата:
Если ты указываешь относительный путь (т.е. не с начала, начинается не с буквы диска), то он считается относительно текущей папки. Текущая папка может быть какой угодно.
Это неверное утверждение.
При старте программы это всегда рабочая папка программы.
Никакой неоднозначности здесь нет.
Соответственно, программа может не работать исключительно из-за содержащихся в ней ошибок, но не потому, что использует относительные пути.
Цитата:
Я рекомендовал бы прочитать вот эти две статьи:

http://www.gunsmoker.ru/2011/10/pascal.html
http://www.gunsmoker.ru/2011/09/blog-post_10.html
Насколько я понял, это Ваши статьи, т.е. они отражают Ваше личное мнение.

Я бы прочитал, но, увы, они недоступны.
Цитата:


Я всё же настаиваю, чтобы вы (s-andriano или Stilet) привели бы конкретный пример.
Пример приведен: нужно, чтобы при копировании ярлыка программы вместе с конфигурационным файлом программа читала именно этот конфигурационный файл.
exe-шник находится в другом месте, и использовать путь к нему недопустимо..
s-andriano вне форума Ответить с цитированием
Старый 03.04.2013, 19:42   #26
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
При старте программы это всегда рабочая папка программы
Не очень-то всегда. Делаем ярлык на рабочем столе и в его свойствах в поле Рабочая папка прописываем любую другую папку. И о блин - при старте рабочая папка не папка с прогой. К ошибкам проги это не относится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2013, 22:53   #27
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не очень-то всегда. Делаем ярлык на рабочем столе и в его свойствах в поле Рабочая папка прописываем любую другую папку. И о блин - при старте рабочая папка не папка с прогой. К ошибкам проги это не относится
Именно эта прописанная папка и будет истинной рабочей папкой программы.
Никаких ошибок кроме тех, что допустил сам программист/пользователь.

Для примера:
создаем ярлык и делаем пустой рабочую папку.
Теперь программа у нас лежит где-то в укромном месте (возможно, с кучей dll и прочей требухой), а config читается из папки с ярлыком.
Очень удобно, когда одной программой нужно регулярно обрабатывать разнообразные данные. В частности, когда требуется одновременный запуск одной и той же программы для обработки различных данных.
Две или более копии работают, читают каждая свои данные, пишут каждая свои результаты, и не мешают друг другу.
s-andriano вне форума Ответить с цитированием
Старый 04.04.2013, 02:32   #28
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Бред...
Зря ссылки не читаете. Зря.

Цитата:
Это неверное утверждение.
По-моему тут у кого-то путаница в терминах. На текущий момент имеем:
- текущая папка
- рабочая папка
- истинная рабочая папка

В моей трактовке это ровно одно и то же. А именно - результат вызова GetCurrentDirectory. А у вас?

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

А вот объяснения, как вы собираетесь бороться с многопоточными проблемами относительных путей (да и даже просто вызовов в сторонний код), я так и не услышал. Заметьте, что контроля над кодом, выполняемым вашей программой, у вас нет. Помимо системного кода в вашей программе работает 5-10 глобальных ловушек или аналогичного стороннего кода.

Цитата:
Очень удобно, когда одной программой нужно регулярно обрабатывать разнообразные данные. В частности, когда требуется одновременный запуск одной и той же программы для обработки различных данных.
Это крайне не стандартное поведение. Стандартно - это указать путь к конфигурации или имя профиля параметром командной строки. Рабочая папка используется для других целей, а именно - разрешения относительных параметров командной строки. Использовать её для своих личных целей - не разумное решение. За нестандартные решения имеет место обычай руки отрывать (образно, конечно же).
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 04.04.2013, 19:06   #29
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
По-моему тут у кого-то путаница в терминах. На текущий момент имеем:
- текущая папка
- рабочая папка
- истинная рабочая папка

В моей трактовке это ровно одно и то же. А именно - результат вызова GetCurrentDirectory. А у вас?
А у меня - не так.
- рабочая папка - она же была текущей на момент старта программы,
- текущая папка - может меняться в процессе работы.
А "истинная" - просто для акцента.
Добавлю, что есть еще папка, в которой расположен exe-шник. В общем случае она может не совпадать ни с той, ни с другой.
Цитата:
Совершенно не понятно, что мешает использовать абсолютные пути. При запуске первым действием сохраняется текущий каталог и в дальнейшем конкатенируется с относительными путями из параметров.
Шедеврально!
Вместо того, чтобы:
1. Открыть файл по относительному пути.
Вы предлагаете:
1. Запомнить текущий каталог.
2. Склеить из текущего каталога и относительного пути абсолютный путь.
3. Открыть файл по абсолютному пути.

То есть:
- программист пишет дополнительный код,
- процессор делает дополнительные операции (не много, но все-таки...),
- программа расходует дополнительную паямть (опять же, немного, но главное - сам факт).

И ради чего все это?
Самое смешное, что результат работы такой программы будет в точности (!) таким же, как и в первом случае. То есть:
- если по каким-то таинственным причинам (например, прокрался злоумышленник и сделал предложенное Аватаром) программа получила при запуске неверную рабчую папку, то предпринятые нами дополнительные действия никак от этого не спасают,
- если же я получаю при запуске правильный путь к рабочей папке, то ве дальнейшее уже зависит только от меня, и нужно или не нужно сохранять рабочую папку, я могу решить в зависимости от конкретных условий, а не следуя кем-то принудительно назначенному явно неоптимальному сценарию.
Цитата:
А вот объяснения, как вы собираетесь бороться с многопоточными проблемами относительных путей (да и даже просто вызовов в сторонний код), я так и не услышал. Заметьте, что контроля над кодом, выполняемым вашей программой, у вас нет. Помимо системного кода в вашей программе работает 5-10 глобальных ловушек или аналогичного стороннего кода.
Прежде, чем думать, как бороться с проблемами, следует удостовериться, что проблемы действительно существуют, а не родились в нашем воспаленном воображении.

Объясните для начала, почему это у меня нет контроля над кодом?
Какие у меня работают глобальные ловушки и какой сторонний код?
Цитата:
Это крайне не стандартное поведение. Стандартно - это указать путь к конфигурации или имя профиля параметром командной строки.
Ну, во-первых, я предложил вариант в ответ на Вашу просьбу. В этой просьбе не оговаривалось, что вариант должен быть непременно таким, который лично Вы сочтете стандартным.
Да если бы даже и указывалось, боюсь, такое требование просто невыплолнимо. Откуда я знаю, может Вам не известно никаких других стандартных программ кроме "Hello, World!".
Цитата:
Рабочая папка используется для других целей, а именно - разрешения относительных параметров командной строки.
Вы сами себе противоречите: в предыдущей цитате Вы заявляли, что в командную строку следует передавать абсолютный путь, а теперь - что относительный.
Цитата:
Использовать её для своих личных целей - не разумное решение. За нестандартные решения имеет место обычай руки отрывать (образно, конечно же).
Не знаю, ведаете ли Вы сами, но Вы затронули достаточно интересный и глубокий вопрос об определении круга достаточных средств.
Как известно, в Паскале три типа циклов: for, while и repeat.
По сути дела Вы предлагаете объявить "правильным" только один из них, а два других считать неправильными, еретическими, некошерными и отрывать за их использование руки.
Нет, теоретически это, конечно, возможно. И даже выполнимо. Только вопрос - удобно ли?
Так и с путями: коль скоро есть два различных варианта задания путей, наиболее разумным мне представляется их умелое сочетание: в каких-то случаях удобнее пользоваться одним, а в каких-то другим.
В принципе, они (с точностью до избыточного кода, ресурсов процессора и памяти) эквивалентны. Так что обойтись только одним из них в принципе можно - точно так же, как и с циклами.
s-andriano вне форума Ответить с цитированием
Старый 04.04.2013, 22:06   #30
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

s-andriano, вы лично можете сколь угодно долго писать код, который работает "почти всегда", но не надо указывать другим на их "ошибки", если вы даже не можете понять о чём они говорят.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание папки warkk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 25.01.2011 18:28
Создание временной папки Яр|/||< (^_^) Qt и кроссплатформенное программирование С/С++ 1 18.03.2010 13:47
Создание папки в C Александр Елис Помощь студентам 3 07.11.2009 11:28
Создание папки sergiksergik Microsoft Office Excel 6 26.06.2009 00:07
Создание папки Яр|/||< (^_^) Общие вопросы Delphi 2 23.06.2009 19:18