程序代码

'**************************************

' 模块名称: AppendToLog
' 功能描述:一个很不错的日志文件写入模块,不同于
'     open/print/close写文件方法,这个模块使用API
'     存取文件,这样保证文件能正确的存取,及时被
'     存取的文件正被其他用户打开。这个模块是最安全
'     有效的文件写入方法,用于日志文件的创建,当然
'     也可以用于其他文件存取。
'   : 枕善居收藏整理
'**************************************
'API 声明
Const GENERIC_WRITE = &H40000000
Const FILE_SHARE_READ = &H1
Const Create_NEW = 1
Const OPEN_EXISTING = 3
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_BEGIN = 0
Const INVALID_HANDLE_VALUE = -1

Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long

Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long

Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long

Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

'**************************************
' 模块名称: AppendToLog
' 功能描述:一个很不错的日志文件写入模块,不同于
'     open/print/close写文件方法,这个模块使用API
'     存取文件,这样保证文件能正确的存取,及时被
'     存取的文件正被其他用户打开。这个模块是最安全
'     有效的文件写入方法,用于日志文件的创建,当然
'     也可以用于其他文件存取。
'   : 枕善居收藏整理
'
' 输入参数:lpFileName As String - 要写入的日志文件名称
' 返 回 值:True 成功, False 失败
'**************************************
Private Function AppendToLog(ByVal lpFileName As String, ByVal sMessage As String) As Boolean
    'appends a string to a text file. it's u
    '     p to the coder to add a CR/LF at the end
    '
    'of the string if (s)he so desires.
    'assume failure
    AppendToLog = False

'exit if the string cannot be written to
    '     disk
    If Len(sMessage) < 1 Then Exit Function

'get the size of the file (if it exists)
    '
    Dim fLen As Long
    fLen = 0

If (Len(Dir(lpFileName))) Then
        fLen = FileLen(lpFileName)
    End If

'open the log file, create as necessary
    Dim hLogFile As Long
    hLogFile = CreateFile(lpFileName, GENERIC_WRITE, FILE_SHARE_READ, ByVal 0&, _
               IIf(Len(Dir(lpFileName)), OPEN_EXISTING, Create_NEW), _
               FILE_ATTRIBUTE_NORMAL, 0&)

'ensure the log file was opened properly
    '
    If (hLogFile = INVALID_HANDLE_VALUE) Then Exit Function

'move file pointer to end of file if fil
    '     e was not created

If (fLen <> 0) Then

If (SetFilePointer(hLogFile, fLen, ByVal 0&, FILE_BEGIN) = &HFFFFFFFF) Then
            'exit sub if the pointer did not set cor
            '     rectly
            CloseHandle (hLogFile)
            Exit Function
        End If
    End If

'convert the source string to a byte arr
    '     ay for use with WriteFile
    Dim lTemp As Long
    Dim TempArray() As Byte
    TempArray = StrConv(sMessage, vbFromUnicode)
    lTemp = UBound(TempArray) + 1

'write the string to the log file

If (WriteFile(hLogFile, TempArray(0), lTemp, lTemp, ByVal 0&) <> 0) Then
        'the data was written correctly
        AppendToLog = True
    End If

'flush buffers and close the file
    FlushFileBuffers (hLogFile)
    CloseHandle (hLogFile)

End Function

转自:枕善居


更多精彩>>>

VB 一个API方式存取日志文件的模块相关推荐

  1. 一个API方式存取日志文件的模块[VB]

    '************************************** ' 模块名称: AppendToLog ' 功能描述:一个很不错的日志文件写入模块,不同于 '     open/pri ...

  2. Oracle原理: 归档方式和日志文件

    一.联机日志.联机日志组 oracle联机重做日志放在了 /oracle/oradata/orcl下,有3个REDO.log,记录了对数据库的所有的操作.用户在对数据库进行操作时,后台进程LGWR就会 ...

  3. 遇到一个日志文件变化带来的文件句柄问题

    正在进行的项目中有个系统调试日志存储的功能,需要存储打印信息.测试部反馈了一个bug:调试日志文件有时候不更新.对照代码,项目用的代码和之前项目的代码是一样的.感觉没什么问题,我自己测试没发现有不 ...

  4. 3:添加一个slave到已有的复制环境(基于二进制日志文件位置)

    服务器 192.168.1.2 (master) ,服务器 192.168.1.3 (old slave) 服务器 192.168.1.4 (new slave) 您可以将另一个slave添加到现有复 ...

  5. 记录 McAfee WebAdvisor 产生大量日志文件,卸载时一直转圈圈,成功卸载方式

    解决方案放前面,下载 McAfee 卸载工具 MCPR.exe 问题描述: 某天 C盘 空间严重不足,使用磁盘扫描工具 SpaceSniffer 看了一眼 C盘,发现在 C:\ProgramData\ ...

  6. vs2010中写日志文件的几种方法

    windows系统日志中记录了系统中硬件.软件和系统问题的相关信息,同时可监控系统中发生的事件.因此当系统崩溃导致一些异常现象发生时可通过系统日志来找出错误发生的原因.那么对于应用软件来说,如果也提供 ...

  7. Linux 服务器日志文件查找技巧精粹

    用来在日志文件里搜索特定活动事件的工具不下几十种,本文将介绍搜索日志文件时应该采取的策略.然后,通过几个具体示例介绍一些使用grep命令手动搜索日志文件的办法.接下来,我们将看到 logwatch工具 ...

  8. 如何在Centos 7上用Logrotate管理日志文件

    何为Logrotate? Logrotate是一个实用的日志管理工具,旨在简化对系统上生成大量的日志文件进行管理. Logrotate允许自动旋转压缩,删除和邮寄日志文件,从而节省宝贵的磁盘空间. L ...

  9. oracle 重做日志内容,Oracle重做日志文件基础

    本文以下所述内容是根据对"Oracle Database Administrator's Guide 11g Release 2 (11.2)" -- " 管理redo ...

最新文章

  1. 企业级nosql数据库应用与实战-redis
  2. 谁说AI无用?疫情下,AI已经代替人类做了很多...
  3. java-jpa-criteriaBuilder使用入门
  4. python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...
  5. 特征选择算法java实现_relief算法特征选择
  6. OpenJudge计算概论-找出第k大的数
  7. 如何假装自己读懂了《时间简史》
  8. 在CentOS 7中安装Jetty服务器
  9. IMO FTPC Part 3-A、B和F级分隔耐火性能测试
  10. 暴风影音CTO:暴风门事件给研发团队带来的启示
  11. ChartControl控件绘制柱状图
  12. 分类,等级,或者有序变量如何进行多因素Cox回归 变量的类型决定了最终结果的reference
  13. 从材料到芯片验证,是逃难还是人生的机遇?
  14. 石油化工企业防雷工程设计解决方案
  15. Oracle两行数据相减
  16. 测试用例设计——WEB通用测试用例(转)
  17. java数组初始化的方式_java数组初始化方式
  18. 可编程中控 c 语言,可编程中控是什么?如何应用?
  19. 挑战巨头,主打安全的Telegram、超信胜算几何?
  20. ToggleButton的用法

热门文章

  1. 太惨!学Python方法用错,直接从入门到放弃!
  2. 雷军:小米生死靠技术!
  3. 年货怎么到家早?华为云+AI 告诉你!
  4. 微软按月收费桌面计划,Win 10 将变成 Win 365?
  5. 小米入局区块链,究竟是为了什么?
  6. linux下mysql的用户名,linux下设置mysql用户名及密码
  7. mysql 时间2039_Apollo使用MySQL时用关键字作为表名报错
  8. mysql让数据-1_[1]mysql-对数据基本操作
  9. mysql重置密码报错,吐血整理
  10. 怎么入门Java?java拦截器怎么配置