文件的控制权的问题(130分)

  • 主题发起人 主题发起人 出血者
  • 开始时间 开始时间

出血者

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在开发代理服务器应用软件时,遇到一个非常棘手的问题。
问题是这样的:我利用代理服务器的日志文件来读取用户的上网记录。
静态的情况是通过测试的,一旦将应用程序实时的加以测试使,
应用程序无法打开日志文件。
那么应用程序如何才能取得文件的控制权又能还掉控制权。
 
不用时关闭文件就是了
 
是否应在'#'下方能操作呢?
 
由于实时时,proxy server已经读写打开该文件,
故你只能以只读共享方式打开日志文件

另,不知你使用的是什么proxy server, 我使用的是M$ proxy server 2.0,
可以以数据库(支持ACCESS和SQL SERVER))方式写日志,
这样进行流量分析统计和跟踪非常方便,我也编了一个基于该proxy server
的分析软件,如你使用M$ proxy server,我们可交流交流
 
谢谢hekai的回答,应用程序并不能以只读共享方式打开日志文件。
出错信息是:'cann't open d:/test/w3990625.log'!
我用的也是M$ proxy server 2.0,采用日志文件来log用户
的上网记录。
 
你在打开文件的调用后面加一个判断错误
代码的语句.先知道哪里错了,才好处理.

对CreateFile(),在后面加:
GetLastError()和FormatMessage
对open/fopen,加:
perror(errno,...)

另外,用Notepad打开log文件,如果也打不开,
就不要想了.那就肯定是打不开了.
 
出血者:

我用如下程序测试,没有发现你说的错误
我的环境是NT4.0+M$ proxy2.0 + win98+delphi4
...
fl : TFileStream;
Buffer : Array[0..1000]Of Char;
begin
fl := TFileStream.create(
'//myserver/c$/NT/system32/msplogs/MSP0625.log',
fmOpenRead Or fmShareDenyNone
);
Try
While (...) Do
Begin
fl.Read(Buffer, 999);
...
End;
Finally
fl.Free;
End;
...
End

另,我强烈建议你用数据库日志,这样方便你维护,如马上删除不需的记录,
进行各种复杂统计等等
还有,也请教你一个问题,不知你如何理解BytesRecvd和BytesSent,
我按各种统计出的结果这两个值都在同一个数量级上,似乎与实际不符,
我的理解是BytesRecvd应比BytesSent大许多,请指教
 
谢谢hekai的答案,经过修改测试,上网实时OK!
其实本人一开始就想用数据库日志,但一直无法
得到记录。可能是数据库字段的问题,希望你能
再帮一个忙,将数据库字段给我,可以e-mail一个;谢谢!

另:至于你提出的BytesRecvd和BytesSent的问题,
我的理解是:BytesRecvd和BytesSent是针对代理服务器
的。有时会出现收的多而发的少。
 
后退
顶部