读书人

求C\C++源码遍历前一天某路径下的lo

发布时间: 2012-02-09 18:22:27 作者: rapoo

求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的类型,即可。
[解决办法]

探讨

引用:

引用:

引用:

1 遍历目录
2 写一个函数,判断是否是前一天的Log
3 是的话,就读LOG文件,写二进制到表里面


请问怎么写二进制到表里面,还请赐教!

应该是将字段类型定义为BLOB。
读取文件,将文件存入一个VARIANT类型中,就可以了……

[解决办法]
不知道你数据库是什么结构,到底是直接将整个文件以二进制方式存放呢,还是读取文件信息然后将信息存放进数据库呢。
前一种的话 你就直接以二进制打开 拷贝到内存中然后存放
第二种的话 你就用fscanf类的函数格式化一下

[解决办法]
Perl code
#! 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();}
[解决办法]
探讨

引用:

不知道你数据库是什么结构,到底是直接将整个文件以二进制方式存放呢,还是读取文件信息然后将信息存放进数据库呢。
前一种的话 你就直接以二进制打开 拷贝到内存中然后存放
第二种的话 你就用fscanf类的函数格式化一下


是将整个文件存放,我是这样打开的:
fstream file;
file.open(filename,ios:……

读书人网 >C++

热点推荐