|
Language: VB5,VB6 Expertise: Intermediate
Sep 6, 2001
SetFileSize - Trim or extend a file's size
Option Explicit
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal _
lpFileName As String, ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, lpSecurityAttributes As Any, _
ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As _
Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, _
ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, _
ByVal dwMoveMethod As Long) As Long
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As _
Long
Private Const FILE_BEGIN = 0
Private Const OPEN_EXISTING = 3
Private Const INVALID_HANDLE_VALUE = -1
Private Const GENERIC_WRITE = &H40000000
' Extend or trim a file to a given length.
' If the file is extended, the added bytes are undefined
Public Sub SetFileSize(ByVal FileName As String, ByVal newSize As Long)
Dim fileHandle As Long
' open the file, get the handle
fileHandle = CreateFile(FileName, GENERIC_WRITE, 0&, ByVal 0&, _
OPEN_EXISTING, 0&, 0&)
' raise error if not found
If fileHandle = INVALID_HANDLE_VALUE Then
Err.Raise 53 ' This is "file not found"
End If
' move the file pointer to new position, raise error if fails
If SetFilePointer(fileHandle, newSize, 0&, FILE_BEGIN) = -1 Then
CloseHandle fileHandle
Err.Raise 5 ' this is "illegal function call"
End If
' attempt to set the end of file, raise error
If SetEndOfFile(fileHandle) = 0 Then
CloseHandle fileHandle
Err.Raise 5 ' this is "illegal function call"
End If
' close the file and exit
CloseHandle fileHandle
End Sub
Francesco Balena
|