Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание файла, если его нет, Выдает ошибку... =( 
:(
    Опции темы
docwar
Дата 15.11.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привет!
В прграмме делаю проверку на существование файла notes.txt, который должен находится в одной папке с программой. Если его нет - надо создать.
Вот такой код раньше работал, сейчас же выдает ошибку, что может открыть файл... =(
Код

void __fastcall TForm5::FormCreate(TObject *Sender)
{
  if(!FileExists("notes.txt"))   //пробовал уже и так:  if(!FileExists(PP + ExtractFileName("notes.txt")));
  {
    FileCreate("notes.txt");   //аналогично, только с FileCreate...
  }
  Memo1->Lines->LoadFromFile(PP + ExtractFileName("notes.txt"));
}
void __fastcall TForm5::FormCloseQuery(TObject *Sender, bool &CanClose)
{
  Memo1->Lines->SaveToFile(PP + ExtractFileName("notes.txt"));
}

PP=GetCurrentDir();
Заранее спасибо!
PM MAIL   Вверх
VitasDeWind
Дата 15.11.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На скорую руку можно предположить что где то не учитывается косая черта (\) в пути до файла...
PM MAIL   Вверх
docwar
Дата 15.11.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Угу! Вы оказались правы. PP оказался пустым...
Переопределил его на доп. форме, теперь при запуске вылазит ошибка, но адрес до файла в оповещении пишется уже полностью.
PM MAIL   Вверх
Bima
Дата 16.11.2006, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Странный у тебя код. Ты пыаешься создать файл без указания путей (т.е. как я понимаю в папке с программой), а читаешь файл с указанием всех путей.

Когда ты запускаешь программу из среды ВСВ, то текущей папкой может быть другая, не такая, как у папки с программой.

Просмотрел два твоих топика, и типичная ошибка у тебя.
Для выяснения причин вставь простой код и сразу все встанет на места:
Код

void __fastcall TForm5::FormCreate(TObject *Sender)
{
  if(!FileExists("notes.txt"))   //пробовал уже и так:  if(!FileExists(PP + ExtractFileName("notes.txt")));
  {
    FileCreate("notes.txt");   //аналогично, только с FileCreate...
  }
   Memo1->Lines->Add(PP + ExtractFileName("notes.txt"));
   Memo1->Lines->Add(GetCurrentDir() + "\\notes.txt");
  //Memo1->Lines->LoadFromFile(PP + ExtractFileName("notes.txt"));
}


и для примера давай разберем твою строчку по частям:
Код

Memo1->Lines->LoadFromFile(PP + ExtractFileName("notes.txt"));

ты берешь переменную РР и прибавляешь к ней имя файла (и заметь без расширения). Если ты переменную РР добавляешь через Edit и указываешь вконце "\", то все нормально, а если через выбор папки, то при выбре локального диска (с или d) черта будет, а если выбрать папку на этом диске, то черты не будет.
Я бы тебе предложил выбирать папку таким образом:
Код

AnsiString Dir;
if (SelectDirectory("Укажите путь","",PP))
   if (PP.SubString(PP.Length(),1)!="\\") PP=PP+"\\";
else Application->MessageBox("Ошибочные данные","Ошибка",MB_ICONSTOP);

а твой код был вот таким:
Код

void __fastcall TForm5::FormCreate(TObject *Sender)
{
  if (!FileExists(ExtractFilePath(ParamStr(0))+"notes.txt"))
  {
    FileCreate(ExtractFilePath(ParamStr(0))+"notes.txt");
  }
Memo1->Lines->LoadFromFile(ExtractFilePath(ParamStr(0))+"notes.txt");
}

или с учетом твоего пути, который записан в переменной РР:
Код

void __fastcall TForm5::FormCreate(TObject *Sender)
{
  if (!FileExists(РР+"notes.txt"))
  {
    FileCreate(РР+"notes.txt");
  }
Memo1->Lines->LoadFromFile(РР+"notes.txt");
}


Это сообщение отредактировал(а) Bima - 16.11.2006, 09:58


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
docwar
Дата 16.11.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо за ответ! Но вопрос не решен... 
единственный способ заставить файл создаваться получился только с "Memo1->Lines->Add(GetCurrentDir() + "\\notes.txt");"
Остальные варианты при запуске выдавали ошибку, что невозможно создать файл, причем путь указывался правильный. В билдере после этого приходилось компилировать приложение заного, а екзешник вырубать тремя клавишами при выходе со странички с Мемо...
PM MAIL   Вверх
docwar
Дата 16.11.2006, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вопрос решил. Вот код:
Код
if(!FileExists(PP + "\\notes.txt")) {Memo1->Lines->SaveToFile(PP + "\\notes.txt");}
Memo1->Lines->LoadFromFile(PP + "\\notes.txt");

Всем большое спасибо! =)
PM MAIL   Вверх
Bima
Дата 17.11.2006, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я уже пишу после закрытия темы, но может быть ошибка у тебя в том, что после создания файла он остается открытым и ты его пытаешься еще раз считать. Попробуй его сразу закрыть, а потом загружай в мемо.


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
docwar
Дата 17.11.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Скорее всего ты прав! =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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