⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 磁盘FAT扇区数据读写操作 Ver 1.20(更新版)
💻 FRM
📖 第 1 页 / 共 3 页
字号:
   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  更新日期:2007/10/09
'描    述:磁盘FAT扇区数据读写操作 Ver 1.20
'网    站: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删除了也是一样不能找回!
'-------------------------------------------------------------------------
'修改: 王伟生
'日期:2007-10-01
'修改对于删除文件夹时的效率问题,比上一个(9.25)完成的程序的效率大有提高,只比WINDOWS删除一个文件夹的效率慢一点点。
'同时修改了几个控件的透明背景问题。
'再次提醒主意:这些操作都是磁盘直接操作读取,复制可以读取磁盘上的任何文件,不管该文件允不允许复制,而删除可以删除任何文件,
'      也不管该文件是否是在使用,也即任何在使用的文件都能删除,比如:*.dll,*.exe,或被占用的文件。FAT文件系统的特点是
       '一旦删除,如果这个文件不是存放在连续簇里,则这个文件将不能再找回,切记!
'-------------------------------------------------------------------------
'修改: 王伟生
'日期:2007-10-06
'修改对于删除文件夹时的效率问题,又比上一个(10.01)完成的程序的效率大大提高,比WINDOWS删除一个文件夹的效率都要高很多。
'-------------------------------------------------------------------------
'修改: 王伟生
'日期:2007-10-08
'修改对于粉碎文件夹时的效率问题,效率大大提高.
'----------------------------------------------------------------------------
'请高手修改一下,能够高效率运行就好,发现问题请一定告知我,并希望能发给我一份,我的邮箱是:wwswwswws@126.com
'*************************************************************************
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
Dim lRootSector 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
       VS1.Value = lRootSector
       Call ReadDisk(Combo1.Text, lRootSector)
       Label17.Caption = lRootSector
       Command1.Caption = "转到启动区"
    Else
        VS1.Value = 0
        Call ReadDisk(Combo1.Text, 0)
        Command1.Caption = "转到目录区"
        Label17.Caption = 0
    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 Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = &HD Then
   Command2_Click
End If
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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -