Запись в файл!Проблемка потери данных!
Код:
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 глючи и не дописывает. Как это исправить? може пользоваться другими функциям?
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); //закрываем файл
Другой вариант работы с файлом
String TmpStr="Мама мыла раму";
int IntegerData=TmpStr.Length();
//пример записи числа
pFileStm->WriteBuffer(&IntegerData, sizeof(int));
//пример записи строки
pFileStm->WriteBuffer(TmpStr.c_str(), TmpStr.Length());
delete pFileStm;
Скорей всего файл не закрыт программно.
Спасибо! Вот уж действительно "Захлопотались мамуля", не закрыть файл !
А подскажите пожалуйстка как сделать такой просто финтик. Есть путь к директории , Нужно перебрать все файлы в директории и поддиректориях, у которых разширение .xsd
Подскажите механизм. Пользоваться сишными функциями, или в билдере есть какой нить объектик хороший?
Спасибо! Вот уж действительно "Захлопотались мамуля", не закрыть файл !
А подскажите пожалуйстка как сделать такой просто финтик. Есть путь к директории , Нужно перебрать все файлы в директории и поддиректориях, у которых разширение .xsd
Подскажите механизм. Пользоваться сишными функциями, или в билдере есть какой нить объектик хороший?
Ну можно вот так - перебирает файлы в директории и строит дерево:
{
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("..");
}
Ну можно вот так - перебирает файлы в директории и строит дерево:
{
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")
{
. . .
}
Ты уверен, что это рабочий код? Я имею в виду не ImageIndex и с неба упавший tvlist, а две тотально одинаковые проверки на одной ветви: if(sr.Attr&faDirectory). Скорей всего вторая проверка (перманентно==false) и добавление вершины к дереву (и само дерево) лишнее. Там вместо добавления вершины нужен бы код:
if(ExtractFileExt(sr.name)=="xsd")
{
. . .
}
В конце рабочей недели я уже ни вчем не уверен...:)
К сожалению, обширное комментирование собственного кода не относится к числу моих достоинств, но насколько я помню, вторая проверка была зачем-то нужна...:), а может просто осталась от предыдущих вариантов...:))), единственная ошибка - нужно проверять на НЕ ДЕРЕКТОРИЮ - т.е. if(!sr.Attr&faDirectory) - задача программы - выводить что то типа оглавления - в которой директории - главы, файлы конкретные разделы. Нафига там еще одна проверка - ну хоть убей - уже не помню. Сейчас попробую перекомпилить без нее.