![]() |
|
|
![]()
|
|
| NPLana |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.5.2005 Где: СПб Репутация: нет Всего: нет |
Помогите - никогда этого не делала...
Требуется: создать файл, из него читать данные и дозаписывать, если чего-то там не найдем.. Делаю так: //Сначала создаю файл тужа, где прога находится AnsiString CurPath = ExtractFilePath(Application->ExeName); //определили где прога AnsiString SetFile = CurPath+"\\set.ini"; if (!FileExists(SetFile)) //если нету FileCreate(SetFile); //создали файл //Далее хочу читать, что-то с прочитанным делать - ну с этим худо бедно могу справиться: TStringList *List = new TStringList; char sd[20]; List->LoadFromFile(SetFile); sscanf(List->Strings[0].c_str(),"%s",sd);; FLook->Label47->Caption=sd;//IntToStr(i1); delete List; //ну а теперь надо записать в его конец чего-нибудь - вот здесь проблема! TFileStream* File = new TFileStream(SetFile, fmOpenWrite); File->Write();//???? File->Free(); В общем |
|||
|
||||
| kline |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 22.10.2004 Репутация: нет Всего: нет |
Да просто делай:
List->Add("то что нужно"); List->SaveTofILE("имя файла"); Если указывать имя файла без полного пути то по умолчанию он создастся именно в директории с программой. |
|||
|
||||
| vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 8.6.2005 Репутация: нет Всего: 17 |
Я что-то не понял
File->Write(); где указано чего именно нужно записать ??? прототип: int __fastcall Write(const void *Buffer, int Count); нужно примерно так: for( int i = 0; i < List->Count; i++) File->Write( List->Strings[i].c_str(), strlen(List->Strings[i].c_str()) ); но даже если ты и сделаешь так - все равно ничего не получиться кроме Exeption'а , тк ты ведь список то уже удалил delete List; И еще, мне активно не нравиться конструкция sscanf(List->Strings[0].c_str(),"%s",sd); здесь могу ошибаться тк сам scanf'ами никогда не пользуюсь, но помоему ты пытаешь 'ручками' редатировать динамические строки. Манипулировать элементами списка можно только с помощью его методов типа Add, Remove и тд -------------------- Cpu not found ! Press any key for software emulation. |
|||
|
||||
| NPLana |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.5.2005 Где: СПб Репутация: нет Всего: нет |
ну собственно как раз и непонятно было, что писать во Write()
теперь ясно, но как при записи в файл осуществлять переход на след строку, а также если надо записать в строку несколько значений как их отделить пробелами?... Добавлено @ 19:11 с проблема разобралась... но как перейти на след строку?? |
|||
|
||||
| vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 8.6.2005 Репутация: нет Всего: 17 |
После каждой строки записывай возврат каретки+перевод строки, те
fwrite( "\r\n", 2, 1, File ); -------------------- Cpu not found ! Press any key for software emulation. |
|||
|
||||
| NPLana |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.5.2005 Где: СПб Репутация: нет Всего: нет |
Сработало вот такое: File->Write("\r\n",2);
спасибо! |
|||
|
||||
| vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 8.6.2005 Репутация: нет Всего: 17 |
Тьфу ты - забыл что за потоковые функции ты используешь :
File->Write( "\r\n", 2 ); -------------------- Cpu not found ! Press any key for software emulation. |
|||
|
||||
| NPLana |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.5.2005 Где: СПб Репутация: нет Всего: нет |
Возник новый вопрос...
При чтении из файла как проверить файл на конец файл? так что-то не работает: TStringList *List = new TStringList; List->LoadFromFile(SetFile); int j=0; while (List->Strings[j]!=NULL) //????? { sscanf(List->Strings[j].c_str(),"%s%s%s",Nip705,NewNameIP,NewNumIP); //здесь будет проверка считанных значений на совпадения с др данными //кстати считанные значения редактироваться не будут } delete List; |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
У стринглиста есть метод возвращающей количество элементов (size или count, плюс мможет Get, а может ещё Items). Как точно называется сейчас не скажу, т. к. не стоит не Билдер, не Делфи, не справочник VCL. Ну ты по списку там посмотри, найдёшь.
Добавлено @ 21:25 Вот с установочного хелп открыл, нашёл:
Это сообщение отредактировал(а) Любитель - 15.6.2005, 21:23 |
|||
|
||||
| NPLana |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.5.2005 Где: СПб Репутация: нет Всего: нет |
спасибо! count!!!
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |