C++ класс файлов File

  • Автор темы NeviDimka
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

NeviDimka

#1
Пишу в файл (с++ класс FILE) последовательность int'ов и даблов, потом читаю в том же порядке - в каком записывал (всего 76 байтов - 9 int'ов и 5 double'ов, вперемешку) где-то после 9 записи он сообщает об ошибке чтения и думает что достигнут конец файла :(
У кого какие будут соображения?
 
04.09.2006
2 566
3
#2
<!--QuoteBegin-NeviDimka+30:04:2007, 14:17 -->
<span class="vbquote">(NeviDimka @ 30:04:2007, 14:17 )</span><!--QuoteEBegin-->У кого какие будут соображения?
[snapback]64000" rel="nofollow" target="_blank[/snapback]​
[/quote]
Глянуть бы на твой код, может соображения и появятся
 
N

NeviDimka

#3
прога сложная, вот упрощенный вариант(просто вставьте в новую форму с Button1 и Button2)
Код:
#include "fstream.h"
FILE	*DlsFile;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if((DlsFile = fopen("D:\\ActDeals.log", "r+")) == NULL)
{
MessageBox(NULL, "Ошибка! Невозможно восстановить активные сделки.", "Монитор", MB_OK);
exit(0);
}
int ivar;
double dvar;

while(!feof(DlsFile))
{
if(!fread(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файл ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, IntToStr(ivar).c_str(), "Монитор", MB_OK);
if(!fread(&ivar,		 sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, IntToStr(ivar).c_str(), "Монитор", MB_OK);
if(!fread(&ivar,	sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, IntToStr(ivar).c_str(), "Монитор", MB_OK);
if(!fread(&ivar,	sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, IntToStr(ivar).c_str(), "Монитор", MB_OK);
if(!fread(&dvar,		 sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, FloatToStr(dvar).c_str(), "Монитор", MB_OK);
if(!fread(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, IntToStr(ivar).c_str(), "Монитор", MB_OK);
if(!fread(&ivar,	  sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, IntToStr(ivar).c_str(), "Монитор", MB_OK);
if(!fread(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, IntToStr(ivar).c_str(), "Монитор", MB_OK);
if(!fread(&dvar,sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, FloatToStr(dvar).c_str(), "Монитор", MB_OK);
if(!fread(&dvar, sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, FloatToStr(dvar).c_str(), "Монитор", MB_OK);
if(!fread(&dvar,	sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, FloatToStr(dvar).c_str(), "Монитор", MB_OK);
if(!fread(&dvar,	 sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, FloatToStr(dvar).c_str(), "Монитор", MB_OK);
if(!fread(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, FloatToStr(ivar).c_str(), "Монитор", MB_OK);
if(!fread(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
else MessageBox(NULL, FloatToStr(ivar).c_str(), "Монитор", MB_OK);
}
fclose(DlsFile);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int ivar;
double dvar;
if((DlsFile = fopen("D:\\ActDeals.log", "w")) == NULL)
{
MessageBox(NULL, "Ошибка! Невозможно восстановить активные сделки.", "Монитор", MB_OK);
exit(0);
}
ivar = 1;
if(!fwrite(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файл ActDeals.log!", "Монитор", MB_OK);
ivar = 2;
if(!fwrite(&ivar,		 sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
ivar = 3;
if(!fwrite(&ivar,	sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
ivar = 4;
if(!fwrite(&ivar,	sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
dvar = 0.5;
if(!fwrite(&dvar,		 sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
ivar = 6;
if(!fwrite(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
ivar = 25 ;
if(!fwrite(&ivar,	  sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
ivar = 27 ;
if(!fwrite(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
dvar = 0.9 ;
if(!fwrite(&dvar,sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
dvar = 0.01 ;
if(!fwrite(&dvar, sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
dvar = 0.011 ;
if(!fwrite(&dvar,	sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
dvar = 0.012;
if(!fwrite(&dvar,	 sizeof(double), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
ivar = 13;
if(!fwrite(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
ivar = 14;
if(!fwrite(&ivar,		sizeof(int), 1, DlsFile))
MessageBox(NULL, "Ошибка чтения в файле ActDeals.log!", "Монитор", MB_OK);
fclose(DlsFile);
}
//----------------
Здесь такойже глюк появляется на предпоследней записи :)
 
N

NeviDimka

#4
Я опять разобрался сам, нужно было всего-лишь писать/читать файл как бинарник :)
неужели никто не додумался?!
 
Статус
Закрыто для дальнейших ответов.