Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запись в файл!Проблемка потери данных!

413
21 января 2005 года
lunaplus
93 / / 04.10.2003
Народ, а подскажие что может быть причиной такого глюка
Код:
FILE *Fxml=fopen(tmpS.c_str(),"w");
int Count=Sl->Count;
for(int i=0;i<Count;i++)
{
fprintf(Fxml,(Sl->Strings+"\n").c_str());
ShowMessage(Sl->Strings);
}

Но в результирующий файл последнии строки не записываються, т.е он обрезается. ХОтя ShowMessage выводит все, а fprinf глючи и не дописывает. Как это исправить? може пользоваться другими функциям?
368
21 января 2005 года
rostyslav
629 / / 13.07.2004
Скорей всего файл не закрыт программно.
2.3K
21 января 2005 года
ART-CODE
134 / / 15.11.2004
Все работает:
Код:
TStringList * Sl=new  TStringList;
Sl->Add("1 str") ;
Sl->Add("2 str") ;
Sl->Add("3 str") ;
Sl->Add("4 str") ;

FILE *Fxml=fopen("sl.txt","w");
int Count=Sl->Count;
for(int i=0;i<Count;i++)
{
fprintf(Fxml,(Sl->Strings+"\n").c_str());
ShowMessage(Sl->Strings);
}
 delete Sl;
 fclose(Fxml); //закрываем файл

Другой вариант работы с файлом
 
Код:
TFileStream* pFileStm = new TFileStream("sl.txt",fmCreate,fmShareExclusive);

   String TmpStr="Мама мыла раму";
   int  IntegerData=TmpStr.Length();
         //пример записи числа
   pFileStm->WriteBuffer(&IntegerData, sizeof(int));
        //пример записи строки
   pFileStm->WriteBuffer(TmpStr.c_str(), TmpStr.Length());

 delete  pFileStm;
413
21 января 2005 года
lunaplus
93 / / 04.10.2003
Цитата:
Originally posted by rostyslav
Скорей всего файл не закрыт программно.


Спасибо! Вот уж действительно "Захлопотались мамуля", не закрыть файл !

А подскажите пожалуйстка как сделать такой просто финтик. Есть путь к директории , Нужно перебрать все файлы в директории и поддиректориях, у которых разширение .xsd
Подскажите механизм. Пользоваться сишными функциями, или в билдере есть какой нить объектик хороший?

301
21 января 2005 года
lord Kelvin
897 / / 08.11.2004
Я тоже внесу свою лепту - вместо "\n" лучше использовать "\r\n". Вот.
2.3K
21 января 2005 года
ART-CODE
134 / / 15.11.2004
Насчет файлов посмотри пример...
http://www.softforum.ru/news.exe?cmd=article&group=cps.borland.cbuilder.faq&item=6&utag=
1
21 января 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by lunaplus

Спасибо! Вот уж действительно "Захлопотались мамуля", не закрыть файл !

А подскажите пожалуйстка как сделать такой просто финтик. Есть путь к директории , Нужно перебрать все файлы в директории и поддиректориях, у которых разширение .xsd
Подскажите механизм. Пользоваться сишными функциями, или в билдере есть какой нить объектик хороший?


Ну можно вот так - перебирает файлы в директории и строит дерево:

Код:
void __fastcall TForm1::FoundFile(AnsiString Dir,TTreeNode *Node)
{
TSearchRec sr;
TTreeNode *NewNode;
TTreeNode *PNode;
ChDir(Dir);
PNode = tvList->Items->AddChild(Node,Dir);
PNode->ImageIndex =0;
FindFirst("*.*",faAnyFile,sr);

while(FindNext(sr)==0){
  if(sr.Name !="."&&sr.Name!=".."){
  if(sr.Attr&faDirectory){
   FoundFile(sr.Name,PNode);
  }
  else{
   if(sr.Attr&faDirectory){
     NewNode = tvList->Items->AddChild(PNode,sr.Name);
     NewNode->ImageIndex = 2;
   }
  }
//
 }
}
 FindClose(sr);
 ChDir("..");
}
368
22 января 2005 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by kot_

Ну можно вот так - перебирает файлы в директории и строит дерево:
Код:
void __fastcall TForm1::FoundFile(AnsiString Dir,TTreeNode *Node)
{
TSearchRec sr;
TTreeNode *NewNode;
TTreeNode *PNode;
ChDir(Dir);
PNode = tvList->Items->AddChild(Node,Dir);
PNode->ImageIndex =0;
FindFirst("*.*",faAnyFile,sr);

while(FindNext(sr)==0){
  if(sr.Name !="."&&sr.Name!=".."){
  if(sr.Attr&faDirectory){
   FoundFile(sr.Name,PNode);
  }
  else{
   if(sr.Attr&faDirectory){
     NewNode = tvList->Items->AddChild(PNode,sr.Name);
     NewNode->ImageIndex = 2;
   }
  }
//
 }
}
 FindClose(sr);
 ChDir("..");
}

Ты уверен, что это рабочий код? Я имею в виду не ImageIndex и с неба упавший tvlist, а две тотально одинаковые проверки на одной ветви: if(sr.Attr&faDirectory). Скорей всего вторая проверка (перманентно==false) и добавление вершины к дереву (и само дерево) лишнее. Там вместо добавления вершины нужен бы код:
if(ExtractFileExt(sr.name)=="xsd")
{
. . .
}

1
22 января 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by rostyslav
Ты уверен, что это рабочий код? Я имею в виду не ImageIndex и с неба упавший tvlist, а две тотально одинаковые проверки на одной ветви: if(sr.Attr&faDirectory). Скорей всего вторая проверка (перманентно==false) и добавление вершины к дереву (и само дерево) лишнее. Там вместо добавления вершины нужен бы код:
if(ExtractFileExt(sr.name)=="xsd")
{
. . .
}


В конце рабочей недели я уже ни вчем не уверен...:)
К сожалению, обширное комментирование собственного кода не относится к числу моих достоинств, но насколько я помню, вторая проверка была зачем-то нужна...:), а может просто осталась от предыдущих вариантов...:))), единственная ошибка - нужно проверять на НЕ ДЕРЕКТОРИЮ - т.е. if(!sr.Attr&faDirectory) - задача программы - выводить что то типа оглавления - в которой директории - главы, файлы конкретные разделы. Нафига там еще одна проверка - ну хоть убей - уже не помню. Сейчас попробую перекомпилить без нее.

1
22 января 2005 года
kot_
7.3K / / 20.01.2000
Эта проверка там не нужна ни в каком варианте, видимо промежуточная версия кода, в рабочем варианте судя по всему отсутствует, так как при ее наличии программа работает некорректно...:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог