он и меняется.
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
карма: 27 |
|
Ответов: 499
Рейтинг: 1
|
|||
Galkov писал(а): HikeR писал(а)
пока элемент "память" хранит значение error.ini или .error.ini (string) можно выбирать где угодно лежащие файлы, и в листбоксе будет показываться путь до них и error.ini будет создаваться в каталоге, где лежит программа Не правда. error.ini будет создаваться и читаться в текущей папке. Которая запросто меняется после работы ODialog. а вы мой последний пример запускали? если в "памяти" только имя файла, то и создается он только рядом с экзешником, откуда его не запускай. а если любой относительный путь (ну вот хочу я создавать его в подкаталоге, дабы не путался под ногами) - то и создается он относительно выбранного каталога, а не откуда стартовала программа. я считаю, что это некая багофича, которую нужно иметь в виду. причем проявляется она только при передаче элементу "работа с ини-файлами" параметра в котором находится полный путь, и одновременным указанием относительного пути через внешний источник. если указывать полный путь для сохранения инишника, все ок. однако этот полный путь еще надо получить, заменить там спецсимволы на двойные слеши... а если у меня таких параметров для сохранения сотня? код разбухнет Dilma, ваш пример замечательно работает с точки зрения сохранения инишников по лично выбранному пути. однако у меня другая задача была, видимо я непонятно выразился. хочется, чтобы эти файлы сохранялись в подкаталог, независимо от места запуска программы. а пока это приходится делать только с передачей полного пути. с коротким, повторюсь, все хорошо. |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
HikeR, я если честно не понимаю тогда в чем задача вообще состоит и в каком месте, а так же у кого ошибка. Много написано каких-то рассуждений относительно ваших соображений о правильности работы программы. Однако я запускаю у себя то, что сопровождено комментарием
ну и вот этот злополучный код...
у вижу, что все работает. И видимо это от того, что нигде не написано, а что же вообще хотелось получить. |
|||
карма: 27 |
|
Ответов: 499
Рейтинг: 1
|
|||
Dilma писал(а): HikeR, я если честно не понимаю тогда в чем задача вообще состоит и в каком месте, а так же у кого ошибка.ну почему же??? я ж писал: HikeR писал(а): а у меня изначально проблема была в другом. инишник должен был лежать в подкаталоге относительно самой программы, т.е. внешнее значение .dataerror.ini даже при наличии такого каталоге на уровне программы путем этих махинаций превращается в случае подачи на вход того же "d: emp" в следущее:
FileName="d: empdataerror.ini" а не FileName="каталог_программыdataerror.ini" потом, Dilma писал(а): а так же у кого ошибкая не говорил, что это ошибка. однако как назвать поведение элемента, который изменяет заданные параметры? возможно я не понимаю логику работы именно этого элемента (работа с ини-файлами), возможно это так и задумано изначально. но тогда ответьте, плиз: HikeR писал(а): дабы предусмотреть такие случаи не изменить ли логику обхода заданных параметров? то есть если есть 4 свойства, 2 заданы внутри, 1 через внешний элемент, то любой поданный на вход параметр считать оставшимся четвертым без вариантов.нет так нет, будет искать обходные пути. если да, то очень замечательно. я изначально сетовал на некорректность работы элемента, однако докопавшись до сути понял, что это всего лишь стечение обстоятельств. работа с ини-файлами всегда проходила корректно, упрекнуть не в чем. пока не стал сохранять пути к программам |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
HikeR писал(а): а вы мой последний пример запускали? если в "памяти" только имя файла, то и создается он только рядом с экзешником, откуда его не запускай.Опять не правда. Специально для Вас подчеркну, что если я говорю категорично, то не считаю это предметом диспута. Просто сообщаю информацию. И это так, не зависимо от того, навится ли это мне или Вам. И, кстати говоря, независимо от того, запускал ли я пример. Короткое имя файла берется системой (а не кодами HiAsm) относительно текущей папки. Которая назначается приложению системой (а не Вами и не HiAsm-ом) и зависит от способа запуска приложения Эта истина значительно старше нас с Вами, и ее истинность НИКАК не зависит от Ваших примеров. В любом файловом менеджере, чуток умнее виндячего проводника, выйдите на уровень вверх и напишите в командной строке имя проги с префиксом папки. Ваша прога запустится, и текущая папка будет та, откуда Вы послали командную строку, а не папка программы. Это так, к примеру... HikeR писал(а): я считаю, что это некая багофича, которую нужно иметь в видуНет тут никакой багофичи, и никакго открытия Америки. Правила определения полного пути по неполной информации от пользователя (например и e:test.ini - не подумайте случайно что это корневая папка на диске E, даже если Вы находитесь сейчас на диске C) существуют еще с незапамятных досовских времен и почти никак не изменились. HikeR писал(а): если указывать полный путь для сохранения инишника, все ок. однако этот полный путь еще надо получить, заменить там спецсимволы на двойные слеши... а если у меня таких параметров для сохранения сотня? код разбухнетВам же объясняли - ничего в Run Time не надо заменять, и ничего никуда не разбухнет Уберите из примера Dilma одну связь, и откройте нам: чего там надо заменять в Run Time code_1171.txt |
|||
карма: 9 |
| ||
файлы: 1 | code_1171.txt [884B] [267] |
Ответов: 499
Рейтинг: 1
|
|||
Galkov писал(а): И, кстати говоря, независимо от того, запускал ли я пример.тогда смею вас уверить, что теория теорией, а практика показывает, что именно в том примере результат положительный. я просто умоляю, запустите его, и повыбирайте на разных уровнях каталоги. хоть тресни, но создается ини в каталоге с программой. все зависит от реализации, и здесь она такова, что пример работает. Galkov писал(а): Уберите из примера Dilma одну связь, и откройте нам: чего там надо заменять в Run Timeу Dilma было вот так:
в таком виде работает всегда, хоть относительный путь указывается, хоть просто имя файла. моя конструкция была еще на один элемент меньше, однако работала только в одном случае. ваши с Dilma - всегда. Galkov писал(а): e:test.ini - не подумайте случайно что это корневая папка на диске Eэти аксиомы еще лет 14 назад изучал и запомнил, так что это точно не открытие америки для меня ;) в общем, проблема снята, вернее решена обходным путем, что тоже вариант. однако для будущих наступателей на грабли может внести пояснение, что во избежание проблем любые файловые операции необходимо проводить с полными путями, а не только с именами файлов? новый компонент чтоли ввести, по аналогии с инструментом PointXY, который складывает перемножает два числа... а самое главное - что в споре рождается истина |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
HikeR писал(а): однако как назвать поведение элемента, который изменяет заданные параметры?А Вы не задавали параметров. Вы предоставили системе определять полный путь, а она (винда, а не элемент, и не HiAsm), оказывается, делает это не так как Вы думаете. И ничего элемент не менял. Вы задали data est.ini Элемент переправил Вашу информацию винде (обратите внимание, ничего не добавляя, не меняя, и не убавляя) Винда считает, что эта информация неполная, и дополняет ее. Оказалось, что не так, как Вы думаете. Вот и все. А как думает винда, известно с незапамятных времен, Вам это я пытался объяснить (уже 2 раза), и мне по Вашей реакции совершенно непонятно - удались ли мои попытки. HikeR писал(а): но тогда ответьте, плизОтвечаем: 1) Нужны серьезные причины для изменений ведущих к несовместимости. 2) Причин пока не было. Были предположения о чем-то. Причем и предположения-то не очень обоснованные. По крайней мере, в том виде, в каком они были изложены. HikeR писал(а): однако докопавшись до сути понялВот как раз в этом и есть серьезные сомнения Неразрешимые пока. [size=-2]------ Добавлено в 17:26 HikeR, вы умоляете меня проверить, можно ли запусть прогу так чтобы текущая папка не совпадала с папкой программы Мне это известно, как и способы такого мероприятия значительно больше, чем 14 лет И я не говорил, что не запускал Вашу программу. Ничего в ней нет такого особенного. 1) Сделал такой тест: code_1173.txt 2) Переместил Project2.exe в папку TMP 3) Написал TMPProject2 - и запустил 4) Получил мессагу HikeR писал(а): эти аксиомы еще лет 14 назад изучал и запомнил, так что это точно не открытие америки для меняВаши посты не доказывают этого. |
|||
карма: 9 |
| ||
файлы: 1 | code_1173.txt [499B] [267] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
HikeR писал(а): в общем, проблема снята, вернее решена обходным путем, что тоже вариант. однако для будущих наступателей на грабли может внести пояснение, что во избежание проблем любые файловые операции необходимо проводить с полными путями, а не только с именами файлов?кажется понял, у кого тут "ошибка": Galkov писал(а): Вам это я пытался объяснить (уже 2 раза), и мне по Вашей реакции совершенно непонятно - удались ли мои попыткивидимо нет. HikeR, это не багфича, а принцип работы ОС, о котором подробно рассказал Galkov. И это не обходный путь, а единственно верный и правильный с учетом описанной выше особенности ОС. И никто, и никогда не делает свои программы с прошитыми в коде относительными путями без явного указания каталога. |
|||
карма: 27 |
|
Ответов: 499
Рейтинг: 1
|
|||
Galkov писал(а): HikeR, вы умоляете меня проверить, можно ли запусть прогу так чтобы текущая папка не совпадала с папкой программы
Мне это известно, как и способы такого мероприятия значительно больше, чем 14 лет И я не говорил, что не запускал Вашу программу. Ничего в ней нет такого особенного. 1) Сделал такой тест: code_1173.txt 2) Переместил Project2.exe в папку TMP 3) Написал TMPProject2 - и запустил 4) Получил мессагу извините, конечно, но блин... я умолял вас проверить, что мною приведенный код работает так, как я описал (и даже из другого каталога). а вы мне суете свой код, который работает так, как вы описали. у меня работает, у вас не работает. но почему-то мне кажется, что это два разных кода. а вам? Galkov, вы, судя по количеству ответов, человек опытный. однако это ничуть не дает вам право быть на 100% уверенным в себе. Galkov писал(а): HikeR писал(а)
однако как назвать поведение элемента, который изменяет заданные параметры? А Вы не задавали параметров. а что я тогда делал?? у элемента 4 параметра, 3 я задал, один остался. ему (элементу) дается 4-й параметр в надежде что он воспримет его правильно, как 4-й параметр. вот еще раз кусок кода: Add(Ini,8976951,427,238) { FileName="" Section="main" Key="path" Type=1 } FileName задавался внешним элементом. а вот Value подавалось на вход (уж простите за электротехнические термины). однако это Value неким образом влияет на FileName, что мне и не нужно совсем. а вы мне начинаетет рассказывать о том, что "Винда считает, что эта информация неполная, и дополняет ее."
если бы я имя файла указал заранее, а имя секции оставил бы пустым, то и получил бы значение на входе как имя секции. и эта логика мне понятна. если пропущен какой-либо параметр, то попытаться использовать данные из потока на его место. или я не прав? если я вместо диалога открытия файла буду давать числа от 1 до 100 из цикла, то именно эти числа и будут записываться в инишник, так как они не меняют текущий путь. а где указано, что ODialog еще вдобавок и это делает? если я от элемента жду предсказуемого результата, а получаю в итоге вариации, еще и зависящие от начальных условий и "винды, которая считает" что я не прав, то я задаю вопрос, почему так. а в итоге получаю кучу информации, из которой понятно, что мне надо изучить основы файловой системы операционки, посмотреть в зеркало и сказать "ну какой же я дурак", и вообще не приставать с вопросами. сказать, что такие начальные условия не были в предусмотрены и вообще выявились в первый раз совесть не позволяет, что ли? Dilma писал(а): И никто, и никогда не делает свои программы с прошитыми в коде относительными путями без явного указания каталога.извините, я делаю. и много других людей делают. только предусматривают это. глобальную переменную, например, вводят для всего проекта. вот скажите, каким образом определяется полный путь к исполняемому файлу? а если в системе стоит запрет на чтение и листинг каталогов? сработает он тогда? а если я симлинк поставлю на каталог с прогой, и запущу ее из другого каталога под символической ссылкой? в худшем случае получим "нет доступа" от системы, либо прога сама даст знать об этом... в общем, опять цитаты: FileName=Определяет имя файла по-умолчанию FileName=Определяет имя INI файла|4|str где тут информация о полном имени? Dilma писал(а): HikeR писал(а)
эти аксиомы еще лет 14 назад изучал и запомнил, так что это точно не открытие америки для меня Ваши посты не доказывают этого. а на заборах, знаете иногда чего пишут? тоже верите? вы бы про файловую систему объснили б лучше человеку, который
блин. Galkov писал(а): HikeR писал(а)
однако докопавшись до сути понял Вот как раз в этом и есть серьезные сомнения Неразрешимые пока. господа. топик начинался немного с другого вопроса, вы еще не забыли? я какое-то время затратил на то, чтобы подобрать пример, который сработал бы у всех, на любом компутере. подобрал, протестировал. вот так работает, а вот так - нет. попутно узнал много интересных вещей, для себя полезных, кстати. только вот из ответов почерпнул две полезные вещи: как правильно конструировать полный путь, и что лучше до всего доходить самому... |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
HikeR писал(а): я умолял вас проверить, что мною приведенный код работает так, как я описал (и даже из другого каталога). а вы мне суете свой код, который работает так, как вы описали. у меня работает, у вас не работает. но почему-то мне кажется, что это два разных кода. а вам?Ставить себе целью сделать работающее приложение у пользователя - не умно Примеры приводятся, чтобы в них разбираться - после этого появляется надежда, что пользователь САМ научится создавать рабочие. Так если разбираться, то мой пример ищет файл по относительному пути. И, если исходить из того, что у Вас всегда находит - здесь тоже должен. Кстати, из Вашего ответа не понятно - у Вас также или нет. В этом аспекте - мне совершенно НЕ кажется, что это разные коды. ОДИНАКОВЫЕ. Хотя это и не Ваш код HikeR писал(а): однако это ничуть не дает вам право быть на 100% уверенным в себеА Вы внимательней читайте написанное. Я не всегда уверен в себе - и в таких случаях именно так и пишу Если ставить ставки как в казино - я бы поставил на то, что ты перед записью каким-то образом менял текущую папку
((между прочим, угадал на 102%)) А когда уверен - пишу именно категорично. Обратите внимание на условие. Именно оно дает право, а не "опытность" Например, пишу абсолютно категорично: d(exp(-t))/dt = -exp(-t) - ровно та же степень уверенности. И обсуждать: правильно это или нет - не интересно. Если есть примеры обратного - цитату, пожалуйста В данном случае, у меня нет никаких сомнений. НО, только после приведенных Вами примеров. HikeR писал(а): а что я тогда делал?? Вы задали только часть необходимой информации. Полная информация - это полный путь. HikeR писал(а): однако это Value неким образом влияет на FileNameНе правда (обратите внимание, опять категорично) Никак не влияет. Что передали, то и попадает в Value в вашей схеме Не согласны - приведите доказательство обратного. Не на словах, естественно - у нас это не модно. HikeR писал(а): а вы мне начинаетет рассказывать о том, что Даже расскажу больше: именно непонимание этого является причиной Ваших проблем И больше ничего (обратите внимание, опять категорично) HikeR писал(а): если я от элемента жду предсказуемого результата, а получаю в итоге вариации, еще и зависящие от начальных условий и "винды, которая считает" что я не прав, то я задаю вопрос, почему так. а в итоге получаю кучу информации, из которой понятно, что мне надо изучить основы файловой системы операционки, посмотреть в зеркало и сказатьВы изложили проблему Вам назвали причины Лично я не ощущаю никакой вины за собой, что причины именно таковы. Что делать после этого - абсолютно Ваше дело. HikeR писал(а): господа. топик начинался немного с другого вопроса, вы еще не забыли?У нас хорошо с памятью: 1) У вас проблема 2) Вам сообщили, что без дополнитнльной информации, можно только угадывать. 3) И даже сделал предположение 4) После предоставленной Вами информации, вижу что угадал. |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
HikeR писал(а): извините, я делаю. и много других людей делают. только предусматривают это. глобальную переменную, например, вводят для всего проекта.все начинающие именно так и делают. Я даже больше скажу - для приложений "под себя" сгодятся любые пути: и с абсолютными адресами, и с относительными. Однако когда программа делается для пользователя автор обязан учесть все возможные варианты. HikeR писал(а): а где указано, что ODialog еще вдобавок и это делает?нигде. К сожалению у нас нет возможности дать полную справку по всем компонентам во всех ситуациях. Большую часть информации вы можете получить только опытным путем, либо с советов с форумов. HikeR писал(а): если я от элемента жду предсказуемого результата, а получаю в итоге вариации, еще и зависящие от начальных условий и "винды, которая считает" что я не прав, то я задаю вопрос, почему так. а в итоге получаю кучу информации, из которой понятно, что мне надо изучить основы файловой системы операционки, посмотреть в зеркало и сказать "ну какой же я дурак"могу расстроить еще больше - ODialog это один из самых простых случаев. Могу рассказать какие вариации вы можете получить скажем для компонента TCP_Server в зависимости от настроек компьютера, настроек локальной сети и настроек провайдера. И все это тоже в справке не указано. И таких элементов еще много. И наша задача подсказать, что не так и самое главное почему. Что и было сделано в этом топике. HikeR писал(а): господа. топик начинался немного с другого вопроса, вы еще не забыли?лично я люблю расписанную по пунктам проблему со словами "хочу чтоб было так, а схема делает вот так". И еще греют душу слова "нажмите вот тут, откройте вот это" и т.д. и т.п. Поймите пожалуста, что проблемы не у вас одного и решать их в виде "ну запустите пример и походите по каталогам туда сюда" нет ни желания, ни времени. HikeR писал(а): вы бы про файловую систему объснили б лучше человеку, который
FileName=".datastalked.ini" точка там нафиг? спросил. ан нет, промолчали почему-то. ответ на этот вопрос был дан постом ниже HikeR писал(а): вот скажите, каким образом определяется полный путь к исполняемому файлу? а если в системе стоит запрет на чтение и листинг каталогов? сработает он тогда?полный путь к запускаемому приложению передается всегда первым параметром. HikeR писал(а): а если я симлинк поставлю на каталог с прогой, и запущу ее из другого каталога под символической ссылкой?симлинк под Windows? |
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Dilma писал(а): автор обязан учесть все возможные варианты.Согласен И даже говорил почему Galkov писал(а): То что делает пользователь Вашей программы, Вы не контролируете.
А он обязательно запустит ее как-нибудь хитрозадо (уверяю Вас, пользователь может сделать все что возможно, и даже нет - это аксиома), совершенно из другого места. [size=-2]------ Добавлено в 20:53 Помню крутейший наезд на отсутствие хелпа на элемент SendMessage http://hiasm.com/xf/topic.php?t=6713 |
|||
карма: 9 |
|
Ответов: 499
Рейтинг: 1
|
|||
Dilma писал(а): симлинк под Windows?ну вообще-то ntfs умеет это делать, только вот средствами винды никак. а под тотал коммандер есть плагин, он делает и жесткие и обычные символические ссылки, только вот проводник их удаляет вместе с оригиналом. Dilma писал(а): К сожалению у нас нет возможности дать полную справку по всем компонентам во всех ситуациях. Большую часть информации вы можете получить только опытным путем, либо с советов с форумов.я помню это обсуждение, мол хасм или хелп. я вообще-то отношусь к категории людей, которые сначала все перепробую сделать в самой программе, а потом уже, в крайнем случае, лезут в хелп или на форумы ;) отсутствие на текущий момент подробного хелпа нисколько вас не умаляет, примерно в курсе, как эти хелпы пишутся, и что есть даже специально обученные люди для их написания. а так, эта информация тоже будет кому-то полезна, и то хлеб. в общем ответ получен, но каждый остался при своем мнении. однако, всем спасибо [size=-2]------ Добавлено в 23:53 сорри за поднятие топика, но опять проблема. про полные пути я уже все понял. но как тогда задать путь для MainForm? позиция и размер у нее тоже должны сохраняться в подкаталоге. либо как тогда менять "текущий" путь после его изменения OSelect, например? [size=-2]------ Добавлено в 23:57 просто у меня много настроечных файлов. ширина и названия табличных частей тоже во внешних файлах. если все остальное можно оформить одним большим инишником и пусть он _один_ лежит в каталоге с программой, то табличные настройки для каждой свои. они могут изменяться (ширина, положение столбцов), поэтому жестко задавать их нельзя. |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
HikeR писал(а): но каждый остался при своем мненииИ в чем же заключается Ваше мнение - таланты криминалиста нужны чтобы понять это В том, что в Value попадает не то что на входе Вам мнение свое никто не излагал, Вам рассказали что происходит на самом деле. И происходит это именно так, независимо от того, кто Вам это рассказал. Или не рассказал HikeR писал(а): сорри за поднятие топика, но опять проблема.
про полные пути я уже все понял. но как тогда задать путь для MainForm? позиция и размер у нее тоже должны сохраняться в подкаталоге. либо как тогда менять "текущий" путь после его изменения OSelect, например? ------ Добавлено в 23:57 просто у меня много настроечных файлов. ширина и названия табличных частей тоже во внешних файлах. если все остальное можно оформить одним большим инишником и пусть он _один_ лежит в каталоге с программой, то табличные настройки для каждой свои. они могут изменяться (ширина, положение столбцов), поэтому жестко задавать их нельзя. Проблема Ваша непонятна Нет просто никакой проблемы |
|||
карма: 9 |
|
Ответов: 499
Рейтинг: 1
|
|||
вот в чем дело. простейший пример:
настройки самой формы всегда сохраняются в подкаталог при его наличии, независимо от места запуска, пути запуска (т.е. запуск из другого каталога), использовании диалога открытия файлов и т.д. почему MainForm умеет определять такое использование относительных путей и всегда расшифровывает сама, не давая винде вмешаться и дополнить, а остальные элементы нет? так и было предусмотрено? а пока использование конструкции предложенной вами:
для каждого элемента имеющего параметр FileName работает, но слишком загромождает схему. мне теперь понятно, что мною заданный параметр "каталог_запускаимя_файла" в свойствах может быть изменено, например, тем же ODialog. как тогда можно изменить "текущий путь" для продолжения использования другими элементами относительных путей, так, чтобы он указывал на каталог запуска? |
|||
карма: 0 |
|