VB中如何得到一个文件的句柄

VB中如何得到一个文件的句柄,第1张

'这是一个获取文件信息的程序

form部分

Private Sub DisplayVerInfo()

' 这个子程序获取文件的版本信息

Dim rc As Long

Dim lDummy As Long

Dim sBuffer() As Byte

Dim lBufferLen As Long

Dim lVerPointer As Long

Dim udtVerBuffer As VS_FIXEDFILEINFO

Dim lVerbufferLen As Long

Dim aBuffer() As Byte

Dim lAdd As Long

Dim astr As String

Dim lTran As Long

' Get size

lBufferLen = GetFileVersionInfoSize(FullFileName, lDummy)

If lBufferLen < 1 Then

MsgBox "无法获取文件版本信息!"

Exit Sub

End If

' 获取文件信息并且保存到udtVerBuffer结构中

ReDim sBuffer(lBufferLen)

rc = GetFileVersionInfo(FullFileName, 0&, lBufferLen, sBuffer(0))

rc = VerQueryValue(sBuffer(0), "\", lVerPointer, lVerbufferLen)

MoveMemory udtVerBuffer, lVerPointer, Len(udtVerBuffer)

StrucVer = Format$(udtVerBufferdwStrucVersionh) & "" & _

Format$(udtVerBufferdwStrucVersionl)

' 获得文件版本

FileVer = Format$(udtVerBufferdwFileVersionMSh) & "" & _

Format$(udtVerBufferdwFileVersionMSl) & "" & _

Format$(udtVerBufferdwFileVersionLSh) & "" & _

Format$(udtVerBufferdwFileVersionLSl)

' 获取产品版本

ProdVer = Format$(udtVerBufferdwProductVersionMSh) & "" & _

Format$(udtVerBufferdwProductVersionMSl) & "" & _

Format$(udtVerBufferdwProductVersionLSh) & "" & _

Format$(udtVerBufferdwProductVersionLSl)

' 获取文件类型

FileFlags = ""

If udtVerBufferdwFileFlags And VS_FF_DEBUG _

Then FileFlags = "Debug "

If udtVerBufferdwFileFlags And VS_FF_PRERELEASE _

Then FileFlags = FileFlags & "PreRel "

If udtVerBufferdwFileFlags And VS_FF_PATCHED _

Then FileFlags = FileFlags & "Patched "

If udtVerBufferdwFileFlags And VS_FF_PRIVATEBUILD _

Then FileFlags = FileFlags & "Private "

If udtVerBufferdwFileFlags And VS_FF_INFOINFERRED _

Then FileFlags = FileFlags & "Info "

If udtVerBufferdwFileFlags And VS_FF_SPECIALBUILD _

Then FileFlags = FileFlags & "Special "

If udtVerBufferdwFileFlags And VFT2_UNKNOWN _

Then FileFlags = FileFlags "Unknown "

' 获取文件所适应的 *** 作系统

Select Case udtVerBufferdwFileOS

Case VOS_WINDOWS32

FileOS = "Win32位 *** 作系统"

Case VOS_WINDOWS16

FileOS = "Win16位 *** 作系统"

Case VOS_DOS

FileOS = "DOS *** 作系统"

Case VOS_DOS_WINDOWS16

FileOS = "DOS-Win16 *** 作系统"

Case VOS_DOS_WINDOWS32

FileOS = "DOS-Win32 *** 作系统"

Case VOS_OS216_PM16

FileOS = "OS/2-16 PM-16 *** 作系统"

Case VOS_OS232_PM32

FileOS = "OS/2-16 PM-32 *** 作系统"

Case VOS_NT_WINDOWS32

FileOS = "NT-Win32 *** 作系统"

Case Else

FileOS = "未知 *** 作系统"

End Select

Select Case udtVerBufferdwFileType

Case VFT_APP

FileType = "应用程序"

Case VFT_DLL

FileType = "动态连接库"

Case VFT_DRV

FileType = "驱动程序"

Select Case udtVerBufferdwFileSubtype

Case VFT2_DRV_PRINTER

FileSubType = "打印驱动程序"

Case VFT2_DRV_KEYBOARD

FileSubType = "键盘驱动程序"

Case VFT2_DRV_LANGUAGE

FileSubType = "语言模块"

Case VFT2_DRV_DISPLAY

FileSubType = "显示驱动程序"

Case VFT2_DRV_MOUSE

FileSubType = "鼠标驱动程序"

Case VFT2_DRV_NETWORK

FileSubType = "网络驱动程序"

Case VFT2_DRV_SYSTEM

FileSubType = "系统驱动程序"

Case VFT2_DRV_INSTALLABLE

FileSubType = "Installable"

Case VFT2_DRV_SOUND

FileSubType = "声音驱动程序"

Case VFT2_DRV_COMM

FileSubType = "串行驱动程序"

Case VFT2_UNKNOWN

FileSubType = "未知驱动程序"

End Select

Case VFT_FONT

FileType = "字体"

Select Case udtVerBufferdwFileSubtype

Case VFT_FONT_RASTER

FileSubType = "光栅字体"

Case VFT_FONT_VECTOR

FileSubType = "矢量字体"

Case VFT_FONT_TRUETYPE

FileSubType = "TrueType字体"

End Select

Case VFT_VXD

FileType = "VxD"

Case VFT_STATIC_LIB

FileType = "Lib"

Case Else

FileType = "未知"

End Select

Form1CurrentX = 4

Form1CurrentY = 4

Form1Print "文件全路径:"

Form1CurrentX = 4

Form1Print "文件版本:"

Form1CurrentX = 4

Form1Print "产品版本:"

Form1CurrentX = 4

Form1Print "文件标志:"

Form1CurrentX = 4

Form1Print " *** 作系统:"

Form1CurrentX = 4

Form1Print "文件类型:"

Form1CurrentX = 4

Form1Print "文件子类型:"

Form1CurrentX = 60

Form1CurrentY = 4

Form1Print FullFileName

Form1CurrentX = 60

Form1Print FileVer

Form1CurrentX = 60

Form1Print ProdVer

Form1CurrentX = 60

Form1Print FileFlags

Form1CurrentX = 60

Form1Print FileOS

Form1CurrentX = 60

Form1Print FileType

Form1CurrentX = 60

Form1Print FileSubType

'清除上一次保存的信息

FullFileName = ""

FileVer = ""

ProdVer = ""

FileFlags = ""

FileOS = ""

FileType = ""

FileSubType = ""

ReDim aBuffer(lBufferLen)

Dim ab As VS_NEWINFO

lVerPointer = 0

rc = GetFileVersionInfo(FullFileName, 0&, lBufferLen, sBuffer(0))

rc = VerQueryValue(sBuffer(0), "\VarFileInfo\Translation", lVerPointer, lVerbufferLen)

MoveMemory lTran, lVerPointer, 4&

astr = "0" Hex$(lTran)

astr = Right$(astr, 4) Left$(astr, 4)

rc = VerQueryValue(sBuffer(0), "\StringFileInfo\" astr "\FileDescription", lVerPointer, lVerbufferLen)

MoveMemory ab, lVerPointer, Len(ab)

Form1CurrentX = 4

Form1Print "文件描述";

Form1CurrentX = 60

Form1Print Left$(abastr, (InStr(abastr, Chr$(0)) - 1))

rc = VerQueryValue(sBuffer(0), "\StringFileInfo\" astr "\ProductName", lVerPointer, lVerbufferLen)

If rc Then

MoveMemory ab, lVerPointer, Len(ab)

Form1CurrentX = 4

Form1Print "产品名称";

Form1CurrentX = 60

Form1Print Left$(abastr, (InStr(abastr, Chr$(0)) - 1))

End If

rc = VerQueryValue(sBuffer(0), "\StringFileInfo\" astr "\OriginalFilename", lVerPointer, lVerbufferLen)

If rc Then

MoveMemory ab, lVerPointer, Len(ab)

Form1CurrentX = 4

Form1Print "文件原始名";

Form1CurrentX = 60

Form1Print Left$(abastr, (InStr(abastr, Chr$(0)) - 1))

End If

rc = VerQueryValue(sBuffer(0), "\StringFileInfo\" astr "\InternalName", lVerPointer, lVerbufferLen)

If rc Then

MoveMemory ab, lVerPointer, Len(ab)

Form1CurrentX = 4

Form1Print "文件内部名";

Form1CurrentX = 60

Form1Print Left$(abastr, (InStr(abastr, Chr$(0)) - 1))

End If

rc = VerQueryValue(sBuffer(0), "\StringFileInfo\" astr "\CompanyName", lVerPointer, lVerbufferLen)

If rc Then

MoveMemory ab, lVerPointer, Len(ab)

Form1CurrentX = 4

Form1Print "公司名称";

Form1CurrentX = 60

Form1Print Left$(abastr, (InStr(abastr, Chr$(0)) - 1))

End If

rc = VerQueryValue(sBuffer(0), "\StringFileInfo\" astr "\LegalCopyright", lVerPointer, lVerbufferLen)

If rc Then

MoveMemory ab, lVerPointer, Len(ab)

Form1CurrentX = 4

Form1Print "版权所有";

Form1CurrentX = 60

Form1Print Left$(abastr, (InStr(abastr, Chr$(0)) - 1))

End If

End Sub

Private Sub Command1_Click()

Form1Cls

CommonDialog1ShowOpen

FullFileName = CommonDialog1Filename

If FullFileName = "" Then

Exit Sub

End If

Call DisplayVerInfo

End Sub

模块部分

' 全局定义

Public Filename As String

Public Directory As String

Public FullFileName As String

Public StrucVer As String

Public FileVer As String

Public ProdVer As String

Public FileFlags As String

Public FileOS As String

Public FileType As String

Public FileSubType As String

Type VS_NEWINFO

astr As String 1024

End Type

Type VS_FIXEDFILEINFO

dwSignature As Long

dwStrucVersionl As Integer

dwStrucVersionh As Integer

dwFileVersionMSl As Integer

dwFileVersionMSh As Integer

dwFileVersionLSl As Integer

dwFileVersionLSh As Integer

dwProductVersionMSl As Integer

dwProductVersionMSh As Integer

dwProductVersionLSl As Integer

dwProductVersionLSh As Integer

dwFileFlagsMask As Long

dwFileFlags As Long

dwFileOS As Long

dwFileType As Long

dwFileSubtype As Long

dwFileDateMS As Long

dwFileDateLS As Long

End Type

Declare Function GetFileVersionInfo Lib "Versiondll" Alias _

"GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal _

dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long

Declare Function GetFileVersionInfoSize Lib "Versiondll" Alias _

"GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, _

lpdwHandle As Long) As Long

Declare Function VerQueryValue Lib "Versiondll" Alias _

"VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, _

lplpBuffer As Any, puLen As Long) As Long

Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _

(dest As Any, ByVal Source As Long, ByVal length As Long)

Declare Function GetSystemDirectory Lib "kernel32" Alias _

"GetSystemDirectoryA" (ByVal Path As String, ByVal cbBytes As Long) As Long

Public Const VS_FFI_SIGNATURE = &HFEEF04BD

Public Const VS_FFI_STRUCVERSION = &H10000

Public Const VS_FFI_FILEFLAGSMASK = &H3F&

Public Const VS_FF_DEBUG = &H1

Public Const VS_FF_PRERELEASE = &H2

Public Const VS_FF_PATCHED = &H4

Public Const VS_FF_PRIVATEBUILD = &H8

Public Const VS_FF_INFOINFERRED = &H10

Public Const VS_FF_SPECIALBUILD = &H20

Public Const VOS_UNKNOWN = &H0

Public Const VOS_DOS = &H10000

Public Const VOS_OS216 = &H20000

Public Const VOS_OS232 = &H30000

Public Const VOS_NT = &H40000

Public Const VOS_BASE = &H0

Public Const VOS_WINDOWS16 = &H1

Public Const VOS_PM16 = &H2

Public Const VOS_PM32 = &H3

Public Const VOS_WINDOWS32 = &H4

Public Const VOS_DOS_WINDOWS16 = &H10001

Public Const VOS_DOS_WINDOWS32 = &H10004

Public Const VOS_OS216_PM16 = &H20002

Public Const VOS_OS232_PM32 = &H30003

Public Const VOS_NT_WINDOWS32 = &H40004

Public Const VFT_UNKNOWN = &H0

Public Const VFT_APP = &H1

Public Const VFT_DLL = &H2

Public Const VFT_DRV = &H3

Public Const VFT_FONT = &H4

Public Const VFT_VXD = &H5

Public Const VFT_STATIC_LIB = &H7

Public Const VFT2_UNKNOWN = &H0

Public Const VFT2_DRV_PRINTER = &H1

Public Const VFT2_DRV_KEYBOARD = &H2

Public Const VFT2_DRV_LANGUAGE = &H3

Public Const VFT2_DRV_DISPLAY = &H4

Public Const VFT2_DRV_MOUSE = &H5

Public Const VFT2_DRV_NETWORK = &H6

Public Const VFT2_DRV_SYSTEM = &H7

Public Const VFT2_DRV_INSTALLABLE = &H8

Public Const VFT2_DRV_SOUND = &H9

Public Const VFT2_DRV_COMM = &HA

2005或者2008版中使用My命名空间(net 框架快捷)轻松实现。如在2008中,可使用智能感知来插入,如在代码编辑框内 单击右键---插入代码段----基本元素,集合数据类型、文件 *** 作、数学等-----文件 这样就可以快速 *** 作相关文件了

使用VB内建函数读取文本文件

1/3

双击Command1添加如下代码

Private Sub Command1_Click()

    Dim strFile     As String

    Dim intFile     As Integer

    Dim strData     As String

    strFile = "c:\学生成绩txt"

    intFile = FreeFile

    Open strFile For Input As intFile

    strData = StrConv(InputB(FileLen(strFile), intFile), vbUnicode)

    DebugPrint strData

    Close intFile

End Sub

2/3

运行代码读取文件

按F8开始单步调试代码,点击Command1,进入单步调试功能,多次按下F8或直接按下F5运行完成,就完成了读取文本文件内容并输出到立即窗口。

查看剩余1张图

3/3

关键代码说明

intFile = FreeFile:获取一个文件句柄

Open strFile For Input As intFile :打开文件

FileLen(strFile) :获取文件内容字节大小

InputB:读取文件内容字节流

StrConv:将字节流转换为Unicode字符串

DebugPrint strData:将字符串内容输出到立即窗口

Close intFile:关闭文件句柄

使用FileSystemObject读取文本文件

1/3

添加Microsoft Scripting Runtime引用

点击Project菜单,再点击下拉菜单中的Reference,打开引用对话框,浏览找到Microsoft Scripting Runtime引用,选择后点确定按钮。

查看剩余1张图

2/3

双击Command2添加如下代码

Private Sub Command2_Click()

    Dim objFS

3/3

运行代码读取文件

按F8开始单步调试代码,点击Command2,进入单步调试功能,多次按下F8或直接按下F5运行完成,就完成了读取文本文件内容并输出到立即窗口。

以上就是关于VB中如何得到一个文件的句柄全部的内容,包括:VB中如何得到一个文件的句柄、VB.NET 获取系统文件 *** 作信息、vb读取文件夹中所有的txt文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9530214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存