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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2013, 18:28   #11
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Devolarium Посмотреть сообщение
насколько я понимаю, то должна создаваться папка в том же месте где расположен файл самой проги
Неправильно понимаешь.

Если ты указываешь относительный путь (т.е. не с начала, начинается не с буквы диска), то он считается относительно текущей папки. Текущая папка может быть какой угодно. Да, по умолчанию она равна папке программы, но это далеко не всегда так. Её может менять вызывающий, твой код и код функций, которые ты вызываешь.

Правило №1: никогда не использовать относительные пути в своих программах. Относительные пути НЕ предназначены для использования программистами. Они предназначены для использования пользователями.

Цитата:
Сообщение от Devolarium Посмотреть сообщение
ExtractFilePath(ParamStr(0))+'\HP\D emo')[/CODE]
Запомни правило: любая функция Delphi, заканчивающаяся на Path, возвращает путь с ведомым разделителем пути. А функция, заканчивающаяся на Dir - путь без ведомого разделителя. Т.е. в результате твой код выдаёт C:\Folder\\HP\Demo.

Правильно:
Код:
ExtractFilePath(ParamStr(0))+'HP\Demo'
Или:
Код:
ExtractFileDir(ParamStr(0))+'\HP\Demo')
Одно в другое превратить можно вызовом Include/ExcludeTrailingPathDelimiter

Цитата:
Но если сунуть прогу в Setup и установить, то при запуске через пуск не работает
Проставь ShowMessage по коду.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось Stilet; 31.03.2013 в 18:55.
GunSmoker вне форума Ответить с цитированием
Старый 31.03.2013, 20:50   #12
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Правило №1: никогда не использовать относительные пути в своих программах. Относительные пути НЕ предназначены для использования программистами. Они предназначены для использования пользователями.
Это неверное правило.
Относительные пути нужно использовать там, где нужны именно относительные пути. Абсолютные - во всех остальных случаях.
s-andriano вне форума Ответить с цитированием
Старый 31.03.2013, 21:28   #13
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Окей, приведи пример использования относительного пути в программе.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.03.2013, 22:17   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
приведи пример использования относительного пути в программе.
ChangeDir() еще не отменили, так что относительные пути местами вполне уместны.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2013, 22:22   #15
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Например, мне нужно просчитать несколько разных вариантов с разными исходными данными одной программой.
При этом существует файл, описывающий конфигурацию режима обработки (он располагается там же, где и exe файл) и файл, описывающий конфигурацию данных (он располагается там же, где ярлык к программе).
Вместе с тем необходимо, чтобы входные и выходные файлы располагались именно по относительным путям относительно ярлыка, и крайне желательно, чтобы при копировании ярлыка и конфигурационного фала в последнем не нужно было переписывать пути.
s-andriano вне форума Ответить с цитированием
Старый 31.03.2013, 22:40   #16
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
ChangeDir() еще не отменили, так что относительные пути местами вполне уместны
Код:
ChangeDir('...');
TFileStream.Create('x.txt', ...);
Наводящий вопрос: что произойдёт, если запустить этот код в два потока одновременно?

Код:
Вместе с тем необходимо, чтобы входные и выходные файлы располагались именно по относительным путям относительно ярлыка, и крайне желательно, чтобы при копировании ярлыка и конфигурационного фала в последнем не нужно было переписывать пути.
Это и называется "пути для пользователя". Коду программы нет никакой необходимости оперировать относительными путями. Единственное, что он может с ними сделать: прочитать со входа и преобразовать в абсолютные.

Ребят, вспомните историю. Что такое относительные пути и откуда они взялись.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.03.2013, 23:43   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если запустить этот код в два потока одновременно?
Ну и, стесняюсь спросить, зачем это делать?
Я же не сказал что везде применять где попало.
Цитата:
вспомните историю
Я не знаю всей истории сего, но вспоминая скажем Фокспро могу сказать однозначно - относительные пути полезны в некоторых случаях, когда нужно локализовать источник данных для независимых разных модулей без необходимости передачи абсолютного пути в качестве параметров. Даже в наше время этот принцип для иерархических систем хранения и обработки данных применим.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2013, 23:48   #18
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Это и называется "пути для пользователя". Коду программы нет никакой необходимости оперировать относительными путями. Единственное, что он может с ними сделать: прочитать со входа и преобразовать в абсолютные.

Ребят, вспомните историю. Что такое относительные пути и откуда они взялись.
В принципе согласен - относительные пути в программе всегда можно преобразовать в абсолютные.
Вопрос лишь в том, насколько это удобно.
Но вопрос удобства вряд ли можно считать абсолютным правилом.
Поэтому не вижу никаких препятствий для использования именно относительных путей там, где это удобно.
Нужно только отчетливо понимать, что делаешь и зачем.
s-andriano вне форума Ответить с цитированием
Старый 01.04.2013, 00:50   #19
Devolarium
Форумчанин
 
Регистрация: 05.12.2011
Сообщений: 102
По умолчанию

Ребят обьясните одну вешь:
1) сначал я должен узнать где распологается папка с прогой
Код:
ExtractFilePath(ParamStr(0));
2) затем создать папку используя этот путь:
Код:
CreateDir(ExtractFileDir(ParamStr(0))+'\HP\Test1\');
3) потом также создать файл:
Код:
 AssignFile(TF[1], ExtractFilePath(ParamStr(0))+'\HP\Demo\1.ini');
я хотя бы в правильном направлении мыслю? :D
Devolarium вне форума Ответить с цитированием
Старый 01.04.2013, 07:44   #20
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

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

В частности, по поводу относительных путей: есть папка, в которой находится exe-шник, и есть рабочая папка программы. Это не одно и то же.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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