Advertisement
ASP_Volume2 Files/ File Controls/ Input/ Output #29616

Determine file format using file header, ignoring the extension

Determines the filetype (PE Executable, GIF Image, Word Document, etc) using the file header/contents, as opposed to using the file extension. Supported types: PE Executable, INI File, AVI Movie, WAV Audio, Word document, Access database, GIF Image, MP3 audio, BMP image, TIFF image, ZIP archive, ARJ archive, RAR archive, HTML/HTA docs, JPEG image, Visual Basic files. If it can't determine the filetype, itll try and determine if the file is text or binary.

AI

AI Summary: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.

Source Code
original-source
Public Function GetFileType(xFile As String) As String
On Error Resume Next
Dim ID As String * 300
If Dir$(xFile) = "" Then
  GetFileType = "NOT FOUND"
  Exit Function
End If
Open xFile For Binary Access Read As #1
 Get #1, 1, ID
Close #1
If Left(ID, 2) = "MZ" Or Left(ID, 2) = "ZM" Then
  GetFileType = "PE Executable"
  Exit Function
ElseIf Left(ID, 1) = "[" And InStr(1, Left(ID, 100), "]") > 0 Then
  GetFileType = "INI File"
  Exit Function
ElseIf Mid(ID, 9, 8) = "AVI LIST" Then
  GetFileType = "AVI Movie File"
  Exit Function
ElseIf Left(ID, 4) = "RIFF" Then
  GetFileType = "WAV Audio File"
  Exit Function
ElseIf Left(ID, 4) = Chr(208) & Chr(207) & Chr(17) & Chr(224) Then
  GetFileType = "Microsoft Word Document"
  Exit Function
ElseIf Mid(ID, 5, 15) = "Standard Jet DB" Then
  GetFileType = "Microsoft Access Database"
  Exit Function
ElseIf Left(ID, 3) = "GIF" Or InStr(1, ID, "GIF89") > 0 Then
  GetFileType = "GIF Image File"
  Exit Function
ElseIf Left(ID, 1) = Chr(255) And Mid(ID, 5, 1) = Chr(0) Then
  GetFileType = "MP3 Audio File"
  Exit Function
ElseIf Left(ID, 2) = "BM" Then
  GetFileType = "BMP (Bitmap) Image File"
  Exit Function
ElseIf Left(ID, 3) = "II*" Then
  GetFileType = "TIFF Image File"
  Exit Function
ElseIf Left(ID, 2) = "PK" Then
  GetFileType = "ZIP Archive File"
  Exit Function
ElseIf InStr(1, LCase(ID), "<html>") > 0 Or InStr(1, LCase(ID), "<!doctype") > 0 Then
  GetFileType = "HTML Document File"
  Exit Function
ElseIf UCase(Left(ID, 3)) = "RAR" Then
  GetFileType = "RAR Archive File"
  Exit Function
ElseIf Left(ID, 2) = Chr(96) & Chr(234) Then
  GetFileType = "ARJ Archive File"
  Exit Function
ElseIf Left(ID, 3) = Chr(255) & Chr(216) & Chr(255) Then
  GetFileType = "JPEG Image File"
  Exit Function
ElseIf InStr(1, ID, "Type=") > 0 And InStr(1, ID, "Reference=") > 0 Then
  GetFileType = "Visual Basic Project File"
  Exit Function
ElseIf Left(ID, 8) = "VBGROUP " Then
  GetFileType = "Visual Basic Group Project File"
  Exit Function
ElseIf Left(ID, 8) = "VERSION " & InStr(1, ID, vbCrLf & "Begin") > 0 Then
  GetFileType = "Visual Basic Form File"
  Exit Function
Else
 'Unknown file... make a weak attempt to determine if the file is text or binary
 If InStr(1, ID, Chr$(255)) > 0 Or InStr(1, ID, Chr$(1)) > 0 Or InStr(1, ID, Chr$(2)) > 0 Or InStr(1, ID, Chr$(3)) > 0 Then
  GetFileType = "Unknown binary file"
 Else
  GetFileType = "Unknown text file"
 End If
 Exit Function
End If
End Function
Original Comments (3)
Recovered from Wayback Machine