求C\C++源码,遍历前一天某路径下的log文件并将其写进数据库
在每天的凌晨1点钟开始遍历前一天的log文件,log文件名是根据日期命名的,将前一天的log文件写进数据库。领导给安排的人物,可我没做过这些啊,求大侠们帮帮忙,小弟感激不尽啊。
[解决办法]
1 遍历目录
2 写一个函数,判断是否是前一天的Log
3 是的话,就读LOG文件,写二进制到表里面
[解决办法]
思路如下:
为了最大限度的提高程序运行速度和效率,每天的LOG放在一个指定的文件下,一般文件夹如下:年\月\日\*.log
程序实现如下
1、开辟一个线程,获取当前时间,当前时间定在1:00左右
2、连接数据库
3、获取前一天时间的文件夹,将该文件夹下的所有LOG文件一个一个的读取,并写入数据库
类、函数:ifstream、FindFirstFile、 FindNextFile
4、关闭数据库
建议:
不要对产生的每个LOG文件直接写入数据库,要将每天的所有LOG文件一起写入数据库;
将每天的LOG文件放入指定的文件夹,便于程序实现高效,同时便于备份等其他操作,如果不这样做的话,
[解决办法]
数据库参阅: http://www.vckbase.com/document/viewdoc/?id=719
将数据文件读取,放入到VARIANT类型对应的位置,设置VARIANT的类型,即可。
[解决办法]
#! perl -wuse strict;use warnings;use DBI;&main();#按照既定格式生成文件名sub getlogfile{ #eg "2012-12-12.log";}sub main{ #假设是mysql数据库 my $dbh = DBI->connet("DBI:mysql:database=db2;host=localhost", "joe", "guessme", {'RaiseError' => 1}); my $logdir = ''; my $logfile = &getlogfile(); my $sql = 'insert into tablename (a,b,c,e,s)values'; OPEN(FH,"$logdie/$logfile"); while(<FH>) { #log formate : 2012-01-16 14:26 user logstring 12312 s/\s/','/g; $sql .= "('$_'),"; } $sql =~ s/,$//g; # execute INSERT query my $rows = $dbh->do($sql); print "$rows row(s) affected "; # clean up $dbh->disconnect();}
[解决办法]