Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
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
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap