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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2014, 22:02   #1
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию Странное повидение

Всем доброго времени суток.
Есть приложение которое по событию FormCreate читает информацию из текстового файла вот таким образом:
Цитата:
List_Time_and_Date.Items.LoadFromFi le('text/Time_and_Date.txt');{читаем из текстовика всю информацию}
List_mission.Items.LoadFromFile('te xt/mission.txt');{читаем из текстовика всю информацию}
То есть есть 2 мемо и каждое мемо читает свой текстовый файл.
Так вот проблема в том, что когда я добавил его в автозагрузку вылетает ошибка "Can not open file 'С:\windows\system32\text\Time_and_ Date.txt'". Я написал вторую программу которая запустит мой Exe-шник с помощью функции ShellExecute так вот выяснилось, что моё приложение каким-то чудесным способом берёт свой путь от того от кого запустилось. Как такое возможно???
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 01.01.2014, 22:19   #2
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

ExtractFilePath(ParamStr(0)) - путь к вашей программе. Танцуйте от этого пути для открытия файлов.
ReportCube вне форума Ответить с цитированием
Старый 01.01.2014, 22:34   #3
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Правила форума запрещают создавать темы с бессмысленным названием. По поводу самого сообщения используй полный путь, а не сокращение. Дополнительного приложения не потребуется.
doktor255 вне форума Ответить с цитированием
Старый 02.01.2014, 12:40   #4
blackstrip
Форумчанин
 
Аватар для blackstrip
 
Регистрация: 21.01.2012
Сообщений: 240
По умолчанию

Если твоя программа лежит в c:\mysoft\proga.exe , то
Application.Exename = 'c:\mysoft\proga.exe'
ExtractFilePath(Application.Exename ) = 'c:\mysoft\'

обращайся не просто к 'text\Time_and_Date.txt', а к ExtractFilePath(Application.Exename )+'text\Time_and_Date.txt'

то есть:

Цитата:
List_Time_and_Date.Items.LoadFromFi le(ExtractFilePath(Application.Exen ame)+'text/Time_and_Date.txt');{читаем из текстовика всю информацию}
List_mission.Items.LoadFromFile(Ext ractFilePath(Application.Exename)+' text/mission.txt');{читаем из текстовика всю информацию}
p.s. что-то форум вставляет пробелы в длинные строки без пробелов) защита от страшных длинных строк?)

Последний раз редактировалось blackstrip; 02.01.2014 в 12:45.
blackstrip вне форума Ответить с цитированием
Старый 02.01.2014, 13:05   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Следствие: 99% проблем, сваливаемых на странное поведение, является следствием ошибок самих программистов.

См в гугле текущая папка/рабочая папка.
Правильный ответ уже дан ExtractFilePath(ParamStr(0)), ну или Application.Exename вместо ParamStr(0)
Есть также другой способ, у ярлыка в автозагрузке указать рабочую папку (ту папку, где exe-шник находится).
Предпочтительнее делать первым способом, второй - это в данном случае костыль.

Цитата:
Сообщение от blackstrip Посмотреть сообщение
что-то форум вставляет пробелы в длинные строки без пробелов) защита от страшных длинных строк?)
Да, просто когда дочитываешь длинную строку до конца, то уже забываешь что было в самом начале. Приходится читать снова и снова )
Ну а код нужно обрамлять другим тегом (кнопка с решёткой #)
Код:
begin
  //код
end.
eoln вне форума Ответить с цитированием
Старый 08.02.2014, 11:17   #6
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Цитата:
Сообщение от blackstrip Посмотреть сообщение
Если твоя программа лежит в c:\mysoft\proga.exe , то
Application.Exename = 'c:\mysoft\proga.exe'
ExtractFilePath(Application.Exename ) = 'c:\mysoft\'

обращайся не просто к 'text\Time_and_Date.txt', а к ExtractFilePath(Application.Exename )+'text\Time_and_Date.txt'

то есть:



p.s. что-то форум вставляет пробелы в длинные строки без пробелов) защита от страшных длинных строк?)
Спасибо огромное, очень помогли.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное условие... Илья Дикушин Паскаль, Turbo Pascal, PascalABC.NET 2 03.08.2013 20:32
Странное отоброжение MaRKer.nsk HTML и CSS 1 31.03.2012 18:00
Странное поведение gets alex_alpha Общие вопросы C/C++ 3 27.03.2010 18:21
Че-то странное .... ~Brilliant~ Безопасность, Шифрование 9 27.04.2009 13:57
Странное закрытие joker Win Api 18 29.03.2008 07:45