读书人

用BCB编一个界面要保存数据而且一

发布时间: 2012-02-06 15:52:44 作者: rapoo

用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设为一小时?设不了吧


可以的,一天都可以

读书人网 >C++ Builder

热点推荐