mirk |
Отправлено: 04.07.2003, 23:41 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 10
|
Есть код:
lbTown->Items->LoadFromFile("data/br/town.br");
cbMkb->Items->LoadFromFile("data/br/mkb.br");
lbTown, cbMkb-Этo Memo
Загрузка идет при включении программы. Т.Е. это своебразные справочники(их порядка 20 штук, в каждом по 5-10 записей)
Есть новое окно(Настройка справочников)
При его включении эти файлы подгружаются в мемо поля там редактируются и сохраняются.
mTown->Items->LoadFromFile("data/br/town.br");
mMkb->Items->LoadFromFile("data/br/mkb.br");
mTown->Lines->SaveToFile("data/br/town.br");
mTown->Lines->SaveToFile("data/br/mkb.br");
При сохранении вылетает ошибка что не может создать файлы.
Подскажите плиз где косяк.
P/S/ Простите за чайниковский жаргон, начал программить всего месяц назад.
|
|
Admin |
Отправлено: 05.07.2003, 09:09 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Во-первых я не понял, как программа у Вас вообще компилится ???
Например вот этот код
QUOTE |
lbTown->Items->LoadFromFile("data/br/town.br");
cbMkb->Items->LoadFromFile("data/br/mkb.br");
lbTown, cbMkb-Этo Memo
|
Насколько мне известно у TMemo нет свойства Items !!!
Ладно, допустим Вы спутали здесь Lines и Items
Далее:
QUOTE |
mTown->Lines->SaveToFile("data/br/town.br");
mTown->Lines->SaveToFile("data/br/mkb.br");
|
Это что ? Вы сохраняете данные из одного компонента mTown
в 2 разных файла ? Так и задумано ?
Теперь, когда вы хотите сохранить в файл SaveToFile("data/br/mkb.br");
вы уверены, что эта директория существует (весь этот путь),
если нет, то надо создать его например с помощью ForceDirectories()
и самое главное — такого пути не бывает,
бывает "c:\aaa\bbb\ccc\ddd" и т.д.
Например так:
CODE |
// Save to File
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ForceDirectories("c:\\data\\br");
Memo1->Lines->SaveToFile("c:\\data\\br\\town.br");
}
//----------
// LoadFromFile
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Memo2->Lines->LoadFromFile("c:\\data\\br\\town.br");
}
//---------------------------------------------------------------------------
|
Или , например, относительно нашей папки нужно
создать \data\br\town.br
CODE |
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString sDir = GetCurrentDir();
ForceDirectories(sDir+"\\data\\br");
Memo1->Lines->SaveToFile(sDir+"\\data\\br\\town.br");
}
//-----------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString sDir = GetCurrentDir();
Memo2->Lines->LoadFromFile(sDir+"\\data\\br\\town.br");
}
//-----------------------------------------------------------
|
|
|
Pacifist |
Отправлено: 11.08.2003, 01:10 |
|
Не зарегистрирован
|
Теперь, когда вы хотите сохранить в файл SaveToFile("data/br/mkb.br");
вы уверены, что эта директория существует (весь этот путь),
если нет, то надо создать его например с помощью ForceDirectories()
и самое главное — такого пути не бывает,
бывает "c:\aaa\bbb\ccc\ddd" и т.д.
Бывает такой путь, бывает!! В Linux, например... |
|
sprinter |
Отправлено: 11.08.2003, 08:15 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
И все же этот путь должен быть написан через двойной обратный слэш "\\" (или может необратный ). Или это подразумевалось?
|
|
Георгий |
Отправлено: 11.08.2003, 11:33 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
в строки языка C можно включать непечатные символы, например конец строки, табуляцию. Чтобы ввести символы, которые по определению нельзя напечатать символ "обратный слеш" был обьявлен служебным. Компилятор анализ строки выполняет так:
1. читает симвовы слева на право.
2. если символ не '\', то оставляет его как есть
3. если символ это '\', то анализирует следующий символ по такому алгоритму:
3.1 b — гудок — вставляется код — 0x07
3.2 r — возврат каретки — переход курсора на начало этой строки — 0x0D
3.3 t — символ горизонтальной табуляции — 0x09
3.4 n — перевод строки — переход на начало следующей строки — 0x0A
3.5 ххх — те символы расшифровку которых я не помню
3.6 число — итерпретируется как код символа
3.7 для всех остальных символов ( в том числе и '\') оставить как есть
Примеры:
строка как выглядит на экране
"asd\nasd" как 2 строки "asd"
"asd\rasd" как 1 строка "asd" (сначалы выводится первая, потом курсор на начало строки и выводится втораяЮ которая и затирает первыю)
"asd\\asd" asd\asd
поэтому, если надо, что бы в строке был символ '\', то его приходится писать 2 раза — первый проглатывается (как служебный), а второй остаётся (как не распознанный код).
Ах да — забыл добавить, что в оконных приложениях Windows большинство управляющих кодов не работают — гарантировано посмотреть их работу можно в DOS программах
Отредактировано Георгий — 11/08/2003, 14:29 |
|
|