声明:
Declare Function WriteFile Lib "kernel32" Alias "WriteFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As OVERLAPPED) As Long
参数表:
hFile ---------- Long,一个文件的句柄
lpBuffer ------- Any,要写入的一个数据缓冲区
nNumberOfBytesToWrite - Long,要写入数据的字节数量。如写入零字节,表示什么都不写入,但会更新文件的“上一次修改时间”。针对位于远程系统的命名管道,限制在65535个字节以内
lpNumberOfBytesWritten - Long,实际写入文件的字节数量
lpOverlapped --- OVERLAPPED,倘若在指定FILE_FLAG_OVERLAPPED的前提下打开文件,这个参数就必须引用一个特殊的结构。那个结构定义了一次异步写操作。否则,该参数应置为空(将声明变为ByVal As Long,并传递零值)
返回值:
Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError
View Code
1 Const MOVEFILE_REPLACE_EXISTING = &H1
2 Const FILE_ATTRIBUTE_TEMPORARY = &H100
3 Const FILE_BEGIN = 0
4 Const FILE_SHARE_READ = &H1
5 Const FILE_SHARE_WRITE = &H2
6 Const CREATE_NEW = 1
7 Const OPEN_EXISTING = 3
8 Const GENERIC_READ = &H80000000
9 Const GENERIC_WRITE = &H40000000
10
11 Private Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long
12
13 Private 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
14
15 Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
16
17 Private 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
18
19 Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
20
21 Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
22
23 Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
24
25 Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
26
27 Private Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
28
29 Private Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) As Long
30
31 Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
32
33 Private Sub Form_Load()
34 'KPD-Team 1998
35 'URL: http://www.allapi.net/
36 'E-Mail: KPDTeam@Allapi.net
37 Dim sSave As String, hOrgFile As Long, hNewFile As Long, bBytes() As Byte
38 Dim sTemp As String, nSize As Long, Ret As Long
39 '设置卷标
40 sSave = InputBox("Please enter a new volume label for drive C:\" + vbCrLf + " (if you don't want to change it, leave the textbox blank)")
41 If sSave <> "" Then
42 SetVolumeLabel "C:\", sSave
43 End If
44
45 '创建缓冲字符
46 sTemp = String(260, 0)
47 '得到临时文件
48 GetTempFileName "C:\", "KPD", 0, sTemp
49 '去掉不必要的空字节
50 sTemp = Left$(sTemp, InStr(1, sTemp, Chr$(0)) - 1)
51 '设置文件属性
52 SetFileAttributes sTemp, FILE_ATTRIBUTE_TEMPORARY
53 '打开临时文件
54 hNewFile = CreateFile(sTemp, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
55 '打开系统文件config.sys
56 hOrgFile = CreateFile("c:\config.sys", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, PEN_EXISTING, 0, 0)
57
58 '计算config.sys文件中字节的大小
59 nSize = GetFileSize(hOrgFile, 0)
60 '设置文件指针
61 SetFilePointer hOrgFile, Int(nSize / 2), 0, FILE_BEGIN
62 '重定义数组长度
63 ReDim bBytes(1 To nSize - Int(nSize / 2)) As Byte
64 '从config.sys中读取内容
65 ReadFile hOrgFile, bBytes(1), Ubound(bBytes), Ret, ByVal 0&
66 '检查是否出错
67 If Ret <> Ubound(bBytes) Then MsgBox "Error reading file ..."
68
69 '写入到临时文件中
70 WriteFile hNewFile, bBytes(1), Ubound(bBytes), Ret, ByVal 0&
71 '检测是否出错
72 If Ret <> Ubound(bBytes) Then MsgBox "Error writing file ..."
73
74 '关闭文件
75 CloseHandle hOrgFile
76 CloseHandle hNewFile
77
78 '移动文件
79 MoveFileEx sTemp, "C:\KPDTEST.TST", OVEFILE_REPLACE_EXISTING
80 '删除文件
81 DeleteFile "C:\KPDTEST.TST"
82
83 Unload Me
84 End Sub

浙公网安备 33010602011771号