📄 form1.frm
字号:
Top = 7305
Width = 1935
End
Begin VB.Label Label11
Alignment = 2 'Center
BackColor = &H00000000&
ForeColor = &H0000FFFF&
Height = 495
Left = 105
TabIndex = 12
Top = 8355
Width = 1935
End
Begin VB.Label Label10
AutoSize = -1 'True
Caption = "磁盘容量:"
Height = 180
Left = 105
TabIndex = 11
Top = 8115
Width = 900
End
Begin VB.Label Label9
Alignment = 2 'Center
BackColor = &H00000000&
ForeColor = &H0000FFFF&
Height = 255
Left = 105
TabIndex = 10
Top = 6855
Width = 1935
End
Begin VB.Label Label8
AutoSize = -1 'True
Caption = "FAT 表占用扇区数:"
Height = 180
Left = 105
TabIndex = 9
Top = 6675
Width = 1620
End
Begin VB.Label Label7
Alignment = 2 'Center
BackColor = &H00000000&
ForeColor = &H0000FFFF&
Height = 255
Left = 105
TabIndex = 8
Top = 6405
Width = 1935
End
Begin VB.Label Label6
AutoSize = -1 'True
Caption = "总扇区数:"
Height = 180
Left = 105
TabIndex = 7
Top = 6195
Width = 900
End
Begin VB.Label Label5
Alignment = 2 'Center
BackColor = &H00000000&
ForeColor = &H0000FFFF&
Height = 255
Left = 105
TabIndex = 6
Top = 5925
Width = 1935
End
Begin VB.Label Label4
AutoSize = -1 'True
Caption = "每簇扇区数:"
Height = 180
Left = 105
TabIndex = 5
Top = 5715
Width = 1080
End
Begin VB.Label Label3
Alignment = 2 'Center
BackColor = &H00000000&
ForeColor = &H0000FFFF&
Height = 255
Left = 105
TabIndex = 4
Top = 5445
Width = 1935
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "每扇区字节数:"
Height = 180
Left = 105
TabIndex = 3
Top = 5250
Width = 1260
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "选择磁盘:"
Height = 180
Left = 120
TabIndex = 2
Top = 120
Width = 900
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'****************************************************************************
'人人为我,我为人人
'枕善居收藏整理
'发布日期:2007/09/30
'描 述:对FAT格式磁盘物理扇区数据读写操作 Ver 1.0
'网 站:http://www.Mndsoft.com/ (VB6源码博客)
'网 站:http://www.VbDnet.com/ (VB.NET源码博客,主要基于.NET2005)
'e-mail :Mndsoft@163.com
'e-mail :Mndsoft@126.com
'OICQ :88382850
' 如果您有新的好的代码别忘记给枕善居哦!
'****************************************************************************
Option Explicit
'*************************************************************************
'**模 块 名:VB 读取磁盘扇区(512 Byte)
'**创 建 人:冯铭(原作者)
'**日 期:2006-08-24 15:54:58
'**描 述:直接代码读取,不用外部 DLL、OCX、API
'**版 本:V1.0.0
'** CSDN ID:SSS2002
'这个代码仅仅演示读取,所以没有危险性
'由于代码针对 FAT 格式了写的,所以只能用于 FAT
'时间仓促,没有处理细节,大家见谅 -_-
'------------------------------------------------------------------------
'修改: 王伟生
'日期:2007-08-25
'加入了安全数组结构,增加了2个API函数,主要是为了转换数据方便 读取FAT16、FAT32, FAT16主要用于U盘
'主意:此程序只能用来读取FAT系统磁盘,不能读取NTFS磁盘
'*************************************************************************
'------------------------------------------------------------------------
'修改: 王伟生
'日期:2007-09-06
'由于前面不加API函数读取,这就有一个问题,只能读取小于2GB空间,大于2GB空间的盘就无法读了
'所以这个又加入了一些API函数,用来可以读取2GB~2TB(可以更大)的盘,取掉原来用Open打开磁盘
'-------------------------------------------------------------------------
'修改: 王伟生
'日期:2007-09-10
'修改读文件夹函数,把原来函数读文件或是文件夹有可能读不出的故障進行了修改,不必输入时要完全与磁盘上的文件名相同
'修改了一些BUG,同时修改了网上的API读取磁盘的许多BUG,如SetFilePointer的对字节数位置的设置中,高32位设置是一个地址而不是
'一个变量,增加一个進度显示条
'-------------------------------------------------------------------------
'修改: 王伟生
'日期:2007-09-16
'增加迭代处理文件夹过程,增加对文件的处理方式(一般复制、刻隆复制、一般删除、文件粉碎),把文件操作放到单独的窗体内進行.
'主意:这些操作都是磁盘直接操作读取,复制可以读取磁盘上的任何文件,不管该文件允不允许复制,而删除可以删除任何文件,
' 也不管该文件是否是在使用,也即任何在使用的文件都能删除,比如:*.dll,*.exe,或被占用的文件。FAT文件系统的特点是
'一旦删除,如果这个文件不是存放在连续簇里,则这个文件将不能再找回,切记!Windows删除了也是一样不能找回!
'*************************************************************************
Private Const MaxLFNPath = 260
Private Const OFFSET_4 = 4294967296#
Private Const OFFSET_2 = 65536
'Private Const MAXINT_4 = 2147483647
'Private Const MAXINT_2 = 32767
Private Type SafeArray1d '1维数组的 SafeArray 定义
cDims As Integer '维数
fFeatures As Integer '标志
cbElements As Long '单个元素的字节数
clocks As Long '锁定计数
pvData As Long '指向数组元素的指针
cElements As Long '维定义,该维的元素个数
Lbound As Long '该维的下界
End Type
'这个API 是显示数据的
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
'这个是用来枚举当前系统磁盘的
Private Declare Function GetLogicalDriveStrings Lib "Kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long
Dim Byte_data() As Byte
Dim Log_Row As Long, Log_Col As Long
Dim tem1(7) As String
Dim tem2(15) As Byte
Dim pBytesInLong() As Byte '用于把字节直接变成Long型而不经过任何计算
Private SA1D As SafeArray1d
Private lPublicLong As Long '定义一个公共交换的长整型数
Dim pBytesInInteger() As Byte
Private SA1DInt As SafeArray1d
Private lPublicInt As Integer
Dim lAllSector As Double
'----------------------------------------------
' Procedure : ByteToLongInit
' Auther : WangWeiSheng
' Input : None
' OutPut : None
' Purpose : 把一个字节数组的起始地址同一个长整型数的地址等起来
'----------------------------------------------
Private Sub ByteToLongInit()
With SA1D
.cDims = 1
.fFeatures = 17
.cbElements = 1
.clocks = 0
.pvData = VarPtr(lPublicLong) '使公共交换的长整形变量的指针与中间交换字节数组的指针等起来
.cElements = 4
.Lbound = 0
End With
CopyMemory ByVal VarPtrArray(pBytesInLong), VarPtr(SA1D), 4 '---使数组变量(其实就是个指针)指向我们自己创建的 SafeArray1d 结构
End Sub
'----------------------------------------------
' Procedure : ByteToIntInit
' Auther : WangWeiSheng
' Input : None
' OutPut : None
' Purpose : 把一个字节数组的起始地址同一个整型数的地址等起来
'----------------------------------------------
Private Sub ByteToIntInit()
With SA1DInt
.cDims = 1
' .fFeatures = 17
.cbElements = 1
.clocks = 0
.pvData = VarPtr(lPublicInt) '使公共交换的整形变量的指针与中间交换字节数组的指针等起来
.cElements = 2
.Lbound = 0
End With
CopyMemory ByVal VarPtrArray(pBytesInInteger), VarPtr(SA1DInt), 4 '---使数组变量(其实就是个指针)指向我们自己创建的 SafeArray1d 结构
End Sub
Private Sub Cmd_Exit_Click()
Unload Me
End Sub
Private Sub Combo1_Click()
VS1.Value = 0
Call ReadDisk(Combo1.Text, VS1.Value)
Label17.Caption = VS1.Value
End Sub
'Private Sub Command1_Click()
' Dim f As Long
'
' If Command1.Caption = "转到目录区" Then
' f = NumConv(tem1(4), 1) * 2 + NumConv(tem1(6), 1)
' If f > VS1.Max Then
' Call ReadDisk(Combo1.Text, f)
' VS1.value = VS1.Max
' Label17.Caption = f
' Else
' VS1.value = f
' Call ReadDisk(Combo1.Text, VS1.value)
' Label17.Caption = VS1.value
' End If
'
' Command1.Caption = "转到启动区"
' Else
' VS1.value = 0
' Call ReadDisk(Combo1.Text, VS1.value)
' Command1.Caption = "转到目录区"
' Label17.Caption = VS1.value
' End If
'
'End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = &HD Then
Command2_Click
End If
End Sub
Private Sub Command2_Click()
Dim lValue As Double
If Text1.Text = "" Then Exit Sub
lValue = Val(Text1.Text)
If lValue > lAllSector Then lValue = lAllSector
If lValue < 0 Then lValue = 0
VS1.Value = lValue
Call ReadDisk(Combo1.Text, lValue)
Label17.Caption = VS1.Value
End Sub
Private Sub Command3_Click()
FrmFileAndDirOperate.Show
End Sub
Private Sub Form_Load()
ByteToLongInit '初始化两个公共变量
ByteToIntInit
VS1.Height = Picture1.Height - 60
Me.Show
Call SetDisk
Call Combo1_Click
End Sub
Sub SetDisk()
Dim strSave As String
Dim drvName As String
Dim ret As Long
Dim keer As Long
strSave = String(255, Chr$(0))
ret& = GetLogicalDriveStrings(255, strSave)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -