Доброго времени суток.Вопрос в следующем: сделал ассоциацию с файлами и мне надо чтобы программа открывающая эти файлы запускалась с определенной папки,тоесть чтобы пути не менялись.По сути я сделал это,но когда открываю файл,пишет-"синтаксическая ошибка в имени файла,имени папки или метке тома"и затем программа запускается из директории откуда я открывал файл(посмотрел через getcurrentdir).непойму в чем дело.прошу помощи.
вот это весьма большие сомнения вызывает. Покажи, что ParamStr(0) пишет ( вместо getcurrentdir ) - сразу будет видно,откуда твой exe стартовал
сам экзэшник запускается из нужной папки,но получается что путь меняется на тот где я файл открываю.такое у меня было с сохранением и решал я это так memo1.Lines.SaveToFile((extractfilepath(paramstr(0)) +( '123'))) а тут не знаю как быть
ну смотри приведу пример на opendialog: например запустил я программу по пути C:\program files\123.exe через нее открываю файл по пути C:\1.txt и путь получается теперь C:\ а надо чтобы был C:\program files\ тоесть надо толи файл копировать к экзэшнику то ли еще как то,вот я и незнаю что делать.могу привести сами процедуры если надо
Что за бред с копированием? Windows правильно делает что меняет тебе текущую папку при открытии, что бы поставить прежнюю(папку твоей проги) воспользуйся вот этим кодом к примеру : Windows.SetCurrentDirectory(PAnsiChar(ExtractFilePath(Application.ExeName)));
При запуске программы GetCurrentDir будет указывать на каталог,в котором лежит exe. После использования OpenDialog, GetCurrentDir встанет на каталог, в котором был открыт файл. Если тебе нужна директория, содержащая .exe, используй ExtractFilePath(ParamStr(0)) - вернет адрес каталога,в котором лежит сам .exe, вне зависимости от того,какой файл(в каком каталоге) ты открыл через OpenDialog
А по-твоему я получу относительный путь, если CurrentDir изменится? Ohhh.. Lol. лучше промолчи в следующий раз, а? И если уж по-твоему, то для того и придумали относительный путь, чтобы пользоваться им, когда нельзя использовать абсолютный. Охарактеризую твой предыдущий и до этого пост:
Ты спросил "Зачем?" Тебе не пришло в голову элементарное: затем! Да потому что изменилась рабочая папка (по-дефолту откуда у нас стартовала программа на ту, что мы указали при работе с диалогом.) Впредь понял, что лучше тебя игнорить, чем доказывать ЭЛЕМЕНТАРНЫЕ вещи, которые тебе не нравятся.
Лол. Говнить? В чем говнокод? Говнокод как раз-таки в StringList.SaveToFile('result.txt'). Сохранять туда, куда программа посчитает нужным (по-дефолту в текущую рабочую папку). Считая говнокодерами других, сам же им и являешься, или ты считаешь StringList.SaveToFile('result.txt') - идеально правильной конструкцией? ИМХО я везде использую конструкцию вида StringList.SaveToFile(GetCurrentDir + '\result.txt')
Если хочеш чтобы сохраняло в папке с программой топиши так StringList.SaveToFile(extractFilePath(paramStr(0))+'result.txt');
Потому что это баг. http://msdn.microsoft.com/en-us/library/community/history/system.windows.forms.openfiledialog.aspx?id=3 А выхода висты, семерки - это было удобно. Ой ой ой.. Спасите меня. Code: StreamWriter write = new StreamWriter(@"C:\Program Files\alalal.txt"); write.Write("a;a;;a;a"); write.Close(); 17:47 - создала файл и записала 17:48 - записала 17:49 - записала 17:50 - записала Мб это как-то связано с фазой луны? АААААА!!! точно, я ведь под учеткой администратора!!! Как же я сразу не додумался. И вот сейчас не надо включать, а ведь не все работают на компе под админом (страшно что-то стало иметь возможность записивать или копироват или что уж там, удалять(!) из папки Program Files!!!), а у тебя еще небось и UAC включен. Ой ой ой. Нельзя мне доверять корпоративные приложения для тупых быдлоюзеров. кодить на Delphi, и не верить его основам. Пиздец, горожане ParamStr(0) Всегда!!!!!!!!!! ВСЕГДАААААА!! Диск/путь/исполняемая программа. Да, я Ванга.
В том что сказал бред) Сколько лет пишу - не знал о такой опции в TOpenDialog, всегда думал что так и должно быть. Я вообще использую тоже похожий код, когда нужно сохранить или загрузить файл, который использует для своих нужд программа(настройки и т.д.) потому что : - Тупил с тем OpenDialog/SaveDialog, теперь не буду. - Потому что программа может использовать плагины или сторонние библиотеки, которые могут во время работы изменить текущую директорию.
ЛОЛШТО? Если ты имел ввиду GetModuleFileName(), то смотрим код функции ParamStr() PHP: function ParamStr(Index: Integer): string; ... if Index = 0 then SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer))) ... Sosnooley