Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с записью в файл... 
:(
    Опции темы
NPLana
Дата 14.6.2005, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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;

//ну а теперь надо записать в его конец чего-нибудь - вот здесь проблема! smile
TFileStream* File = new TFileStream(SetFile, fmOpenWrite);
File->Write();//????
File->Free();

В общем smile

PM MAIL   Вверх
kline
Дата 15.6.2005, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да просто делай:
List->Add("то что нужно");
List->SaveTofILE("имя файла");
Если указывать имя файла без полного пути то по умолчанию
он создастся именно в директории с программой.
PM MAIL   Вверх
vadims
Дата 15.6.2005, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
NPLana
Дата 15.6.2005, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну собственно как раз и непонятно было, что писать во Write()
теперь ясно, но как при записи в файл осуществлять переход на след строку, а также если надо записать в строку несколько значений как их отделить пробелами?...
Добавлено @ 19:11
с проблема разобралась... но как перейти на след строку??
PM MAIL   Вверх
vadims
Дата 15.6.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



После каждой строки записывай возврат каретки+перевод строки, те
fwrite( "\r\n", 2, 1, File );


--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
NPLana
Дата 15.6.2005, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сработало вот такое: File->Write("\r\n",2); smile
спасибо!
PM MAIL   Вверх
vadims
Дата 15.6.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тьфу ты - забыл что за потоковые функции ты используешь :

File->Write( "\r\n", 2 );


--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
NPLana
Дата 15.6.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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;
PM MAIL   Вверх
Любитель
Дата 15.6.2005, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



У стринглиста есть метод возвращающей количество элементов (size или count, плюс мможет Get, а может ещё Items). Как точно называется сейчас не скажу, т. к. не стоит не Билдер, не Делфи, не справочник VCL. Ну ты по списку там посмотри, найдёшь.
Добавлено @ 21:25
Вот с установочного хелп открыл, нашёл:
Цитата
Indicates the number of strings in the list.

property Count: Integer;

Description

Use Count when iterating over all the strings in the list, or when trying to locate the position of a string relative to the last string in the list.


Это сообщение отредактировал(а) Любитель - 15.6.2005, 21:23


--------------------
PM MAIL ICQ Skype   Вверх
NPLana
Дата 15.6.2005, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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

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

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


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

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


 




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


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

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