用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;
}
}
}
[解决办法]
[解决办法]
最关键的创建文件的代码没有看到
[解决办法]
这是我原来用过的一个创建文件的程序代码,供参考
- 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);}
[解决办法]