Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение файла, Проблема с LoadFromFile 
V
    Опции темы
CynicRus
Дата 14.6.2012, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Приветствую, господа. Задача тривиальна, прочитать файл. Читаю:
Код

procedure TForm1.GetParams;
begin
if  fileexists('rsc.prm') then
Params.LoadFromFile('rsc.prm');
end;

И файл не находится, хотя лежит в каталоге рядом с программой! Что я не так делаю?
PM MAIL   Вверх
Qu1nt
Дата 14.6.2012, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Задавай абсолютный путь.

Это сообщение отредактировал(а) Qu1nt - 14.6.2012, 15:58
PM MAIL   Вверх
CynicRus
Дата 14.6.2012, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Спасибо, понял. Обошелся помощью 
Код

ExtractFilePath(Application.ExeName)+'rsc.prm'


PM MAIL   Вверх
CynicRus
Дата 14.6.2012, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Ан нет, не обошелся. Показывает мне полный путь к файлу, и говорит мол - файл не найден. Хотя он на месте там лежит.
PM MAIL   Вверх
XperT
Дата 14.6.2012, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 19.8.2006

Репутация: нет
Всего: 4



А если в showmessage закинуть, что пишет, правильный путь?
Просто обычно так не бывает, что проводник файл видит, а программа нет.

А вообще, кинули бы вы исходник проекта.

Это сообщение отредактировал(а) XperT - 14.6.2012, 17:48
PM MAIL   Вверх
CynicRus
Дата 14.6.2012, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Собственно файл проекта. Да, путь правильный пишет. Я понимаю, что обычно не бывает-))) Честно говоря - у самого подобное впервые-)
PM MAIL   Вверх
XperT
Дата 14.6.2012, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 19.8.2006

Репутация: нет
Всего: 4



Вот эта функция:
Код

procedure TForm1.GetParams;
begin
TSTringList.Create;
if fileexists(ExtractFilePath(Application.ExeName)+'rsc.prm') then
Params.LoadFromFile(ExtractFilePath(Application.ExeName)+'rsc.prm');
end;


Как минимум правильно делать так:
Код

procedure TForm1.GetParams;
begin
Params := TSTringList.Create;
if fileexists(ExtractFilePath(Application.ExeName)+'rsc.prm') then
Params.LoadFromFile(ExtractFilePath(Application.ExeName)+'rsc.prm');
end;


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

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

Это сообщение отредактировал(а) XperT - 14.6.2012, 19:38
PM MAIL   Вверх
Данкинг
Дата 14.6.2012, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



А разве слеш перед rsc.prm не надо?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
CynicRus
Дата 14.6.2012, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



На то он и учебный код-) Но тем не менее - файл то он почему не находит?-)) В первоначальном варианте - и было все с локальной переменной. Просто, как в любом тестовом проекте - пробуются разные варианты, потому вот такая хрень и получается-))) Спасибо, поправлю-) Но вопрос то остаётся, почему файл то не грузится, хотя путь верный?-)

Добавлено через 4 минуты и 8 секунд
Цитата(Данкинг @ 14.6.2012,  19:45)
А разве слеш перед rsc.prm не надо?

Без слеша показывает правильный путь, со слешем...тоже правильный показывает. Но тем не менее - очень ругается что файл найти ему не под силу.
PM MAIL   Вверх
Keeper89
Дата 14.6.2012, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Данкинг, ExtractFilePath со слешем возвращает.

Добавлено через 1 минуту и 12 секунд
CynicRus, окно отладчика с значениями переменных и наличием файла в проводнике приведи плиз.


--------------------
PM MAIL WWW   Вверх
CynicRus
Дата 14.6.2012, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



user posted image

Это сообщение отредактировал(а) CynicRus - 14.6.2012, 20:15
PM MAIL   Вверх
Qu1nt
Дата 14.6.2012, 20:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Вероятно, в имени файла используется русская буква «c».
PM MAIL   Вверх
CynicRus
Дата 14.6.2012, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Цитата(Qu1nt @ 14.6.2012,  20:23)
Вероятно, в имени файла используется русская буква «c».

Ё-моё. А действительно. Ума не приложу - каким образом,так получилось, но Вы правы. Спасибо
PM MAIL   Вверх
Данкинг
Дата 14.6.2012, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(Keeper89 @  14.6.2012,  20:59 Найти цитируемый пост)
ExtractFilePath со слешем возвращает.

Разве? А я всегда слеш ставлю. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Qu1nt
Дата 14.6.2012, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Данкинг, гораздо удобнее использовать класс TPath.
Код

TPath.Combine(TPath.GetDirectoryName(Application.ExeName), 'Read.me');

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.