首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

用BCB编一个界面,要保存数据,而且一个小时新建一个txt文件来保存,小弟我用timer事件进行一小时建一个文本文件,不知为何却新建不了文件

2012-02-06 
用BCB编一个界面,要保存数据,而且一个小时新建一个txt文件来保存,我用timer事件进行一小时建一个文本文件,

用BCB编一个界面,要保存数据,而且一个小时新建一个txt文件来保存,我用timer事件进行一小时建一个文本文件,不知为何却新建不了文件。
我用用BCB编了一个界面,功能是显示及保存数据,保存数据时要一个小时新建一个txt文件,我就用timer事件实现一小时建一个文本文件,结果却新建不了。请大家帮忙!下面的程序是timer事件程序段。

void __fastcall Tshowform::AnHourTimer(TObject *Sender) //每小时新建一个文件保存数据
{
  num ++;
  //char c_FileName[100];
  BuildFileName(); // 构造文件名字
  m_FileName = m_tmp +m_FileName;
  m_FileName += ".txt";
  sprintf(c_FileName,"%s", m_FileName); //将构造的文件名转化成字符型
  file1.open(c_FileName,ios::out); //打开一个文本文件,如果不存在,则新建一个
  Edit8->Text=IntToStr(num);
}

void __fastcall Tshowform::BuildFileName()
{
  char buf[30];
  struct tm *tblock;
  struct tm * date_time;
  time_t timer;
  //char str[50];
  char NowTime[50];
  time(&timer);
  //date_time=localtime(&timer);
  //strftime(str,50,"%A",date_time);
  m_NowTime = TimeToStr(Time()); // m_NowTime为字符串

  tblock = localtime(&timer);
  sprintf(buf,"%4d-%02d-%02d",tblock->tm_year+1900,tblock->tm_mon+1,tblock->tm_mday);
  m_FileName = buf;
  m_FileName += "-";
  sprintf(NowTime,"%s", m_NowTime);
  for(int i=0;i<sizeof(NowTime);i++)
  {if(NowTime[i]==':')
  NowTime[i]='-';
  }
  m_FileName+=NowTime;
}


[解决办法]
Timer->Interval设为一小时太长了,设为一分钟试试,Timer设置最长时间好像是两分钟

void __fastcall Tshowform::AnHourTimer(TObject *Sender) //每小时新建一个文件保存数据 
{static int k =0;
k++;
if(k<60) return;
k=0;

num ++; 
//char c_FileName[100]; 
BuildFileName(); // 构造文件名字 
m_FileName = m_tmp +m_FileName; 
m_FileName += ".txt"; 
sprintf(c_FileName,"%s", m_FileName); //将构造的文件名转化成字符型 
file1.open(c_FileName,ios::out); //打开一个文本文件,如果不存在,则新建一个 
Edit8->Text=IntToStr(num); 


[解决办法]
还有,你的文件名好像只有一个,不知m_tmp 是不是变化的,设为
m_FileName = IntToStr(num )+m_tmp +m_FileName; 试试
[解决办法]
打开 ->写文件 ->关闭
重复以上
[解决办法]
Timer设为一小时?设不了吧
[解决办法]

C/C++ code
void __fastcall Tshowform::AnHourTimer(TObject *Sender) //每小时新建一个文件保存数据 {         num ++;         //char c_FileName[100];         BuildFileName();                            // 构造文件名字         m_FileName = m_tmp +m_FileName;         m_FileName += ".txt";         sprintf(c_FileName,"%s", m_FileName);          //将构造的文件名转化成字符型         file1.open(c_FileName,ios::out);              //打开一个文本文件,如果不存在,则新建一个         Edit8->Text=IntToStr(num);        file1.close(); // 加上这句}
[解决办法]
文件名要有变化,
新建的打开的文件要关闭一下

TIMER时间间隔不是一个小时,要有条件限制,不然就会一直建新文件
[解决办法]
伪代码如下:

DWord dOldTime = GetTickout();
while(true)
{
Create File;
while(true)


{
DWord dNewTime = GetTickout();
if(dNewTime - dOldTime <= 1H)
Write FIle;
else
{
关闭文件;
dOldTime = dNewTime ; 
break;
}
}

}


[解决办法]

探讨
Timer设为一小时?设不了吧

[解决办法]
最关键的创建文件的代码没有看到
[解决办法]
这是我原来用过的一个创建文件的程序代码,供参考

C/C++ code
//创建日志文件,返回日志文件的句柄bool __fastcall TLogUnitEx3::CreateLogFile(){    //1.创建路径    if(!CreateLogDirectory()) return false;    //2.创建文件    int handle;    switch(FLogMode)    {        case NewLog_With_Date:            FPostfix = FormatDateTime("_YYYYMMDD",Now());            HLogFile = CreateFile(              (FLogFileName+FPostfix+".txt").c_str(),              FILE_APPEND_DATA,              FILE_SHARE_READ|FILE_SHARE_WRITE, //FILE_SHARE_READ,              NULL,              OPEN_EXISTING,              FILE_ATTRIBUTE_NORMAL,              NULL            );            break;                    case NewLog_With_Hour:            FPostfix = FormatDateTime("_YYYYMMDDHH",Now());            HLogFile = CreateFile(              (FLogFileName+FPostfix+".txt").c_str(),              FILE_APPEND_DATA,              FILE_SHARE_READ|FILE_SHARE_WRITE, //FILE_SHARE_READ,              NULL,              OPEN_EXISTING,              FILE_ATTRIBUTE_NORMAL,              NULL            );            break;                    case OneLog_New:            FPostfix = "";            HLogFile = CreateFile(              (FLogFileName+FPostfix+".txt").c_str(),              FILE_APPEND_DATA,              FILE_SHARE_READ|FILE_SHARE_WRITE, //FILE_SHARE_READ,              NULL,              CREATE_ALWAYS,              FILE_ATTRIBUTE_NORMAL,              NULL            );            break;                    case OneLog_Add:            FPostfix = "";            HLogFile = CreateFile(              (FLogFileName+FPostfix+".txt").c_str(),              FILE_APPEND_DATA,              FILE_SHARE_READ|FILE_SHARE_WRITE, //FILE_SHARE_READ,              NULL,              OPEN_EXISTING,              FILE_ATTRIBUTE_NORMAL,              NULL            );            break;    }    if(GetLastError() == 2)    {        HLogFile = CreateFile(          (FLogFileName+FPostfix+".txt").c_str(),          FILE_APPEND_DATA,          FILE_SHARE_READ|FILE_SHARE_WRITE,             //FILE_SHARE_READ,          NULL,          CREATE_NEW,          FILE_ATTRIBUTE_NORMAL,          NULL        );    }    return (HLogFile!=NULL);}
[解决办法]
这是我写过的一个创建文件的代码,供参考。

C/C++ code
//创建日志文件,返回日志文件的句柄bool __fastcall TLogUnitEx3::CreateLogFile(){    //1.创建路径    if(!CreateLogDirectory()) return false;    //2.创建文件    int handle;    switch(FLogMode)    {        case NewLog_With_Date:            FPostfix = FormatDateTime("_YYYYMMDD",Now());            HLogFile = CreateFile(              (FLogFileName+FPostfix+".txt").c_str(),              FILE_APPEND_DATA,              FILE_SHARE_READ|FILE_SHARE_WRITE, //FILE_SHARE_READ,              NULL,              OPEN_EXISTING,              FILE_ATTRIBUTE_NORMAL,              NULL            );            break;                    case NewLog_With_Hour:            FPostfix = FormatDateTime("_YYYYMMDDHH",Now());            HLogFile = CreateFile(              (FLogFileName+FPostfix+".txt").c_str(),              FILE_APPEND_DATA,              FILE_SHARE_READ|FILE_SHARE_WRITE, //FILE_SHARE_READ,              NULL,              OPEN_EXISTING,              FILE_ATTRIBUTE_NORMAL,              NULL            );            break;                    case OneLog_New:            FPostfix = "";            HLogFile = CreateFile(              (FLogFileName+FPostfix+".txt").c_str(),              FILE_APPEND_DATA,              FILE_SHARE_READ|FILE_SHARE_WRITE, //FILE_SHARE_READ,              NULL,              CREATE_ALWAYS,              FILE_ATTRIBUTE_NORMAL,              NULL            );            break;                    case OneLog_Add:            FPostfix = "";            HLogFile = CreateFile(              (FLogFileName+FPostfix+".txt").c_str(),              FILE_APPEND_DATA,              FILE_SHARE_READ|FILE_SHARE_WRITE, //FILE_SHARE_READ,              NULL,              OPEN_EXISTING,              FILE_ATTRIBUTE_NORMAL,              NULL            );            break;    }    if(GetLastError() == 2)    {        HLogFile = CreateFile(          (FLogFileName+FPostfix+".txt").c_str(),          FILE_APPEND_DATA,          FILE_SHARE_READ|FILE_SHARE_WRITE,             //FILE_SHARE_READ,          NULL,          CREATE_NEW,          FILE_ATTRIBUTE_NORMAL,          NULL        );    }    if(HLogFile!=NULL)    {        FTraceEnabled = true;        PrintLogHeader();    }    return (HLogFile!=NULL);} 


[解决办法]

探讨
引用:
Timer设为一小时?设不了吧


可以的,一天都可以

热点排行