>Namespace Framework > > Public Class FileType > > Public cExtension As String = "" > Public cFile As String = "" > Public cMessage As String = "" > Public nNoFileType As Integer = 0 > Private oApp As Framework.App = Nothing > Private oProcess As Framework.LXProcess = Nothing > > ' This is when we access the class in a desktop mode > Sub New(ByVal toApplication As Framework.App) > oApp = toApplication > End Sub > > ' This is when we access the class in a Web or Web Service mode > Public Sub New(ByVal toProcess As Framework.LXProcess) > oProcess = toProcess > oApp = oProcess.oApp > End Sub > > ' Return the file type > ' expC1 File name with the full path > Public Function FileType() As Boolean > Dim lcDirectory As String = "" > Dim lcExtension As String = "" > Dim lcFile As String = "" > Dim lcString As String = "" > Dim lcValue As String = "" > Dim lnLocation As Integer = 0 > Dim loDirectoryFunction As Framework.DirectoryFunction = Nothing > Dim loFileDirectory As Framework.FileDirectory = Nothing > Dim loFileFunction As Framework.FileFunction = Nothing > Dim loXml As Framework.XML = Nothing > Dim loZip As Framework.Zip = Nothing > > ' Get the proper definition as per the current scope > If oProcess Is Nothing Then > loDirectoryFunction = New Framework.DirectoryFunction(oApp) > loFileDirectory = New Framework.FileDirectory(oApp) > loFileFunction = New Framework.FileFunction(oApp) > loXml = New Framework.XML(oApp) > loZip = New Framework.Zip(oApp) > Else > loDirectoryFunction = New Framework.DirectoryFunction(oProcess) > loFileDirectory = New Framework.FileDirectory(oProcess) > loFileFunction = New Framework.FileFunction(oProcess) > loXml = New Framework.XML(oProcess) > loZip = New Framework.Zip(oProcess) > End If > > ' Reset everything > cExtension = "" > cMessage = "" > nNoFileType = 0 > > ' Initialization > lcFile = Trim(cFile) > > ' Read it as a binary > lcString = oApp.FileToStrBinary(lcFile) > > ' If we have less than four characters > If lcString.Length < 4 Then > Return False > End If > > ' If this is a JPG > If Left(lcString, 3) = Chr(255) + Chr(216) + Chr(255) Then > cExtension = "JPG" > nNoFileType = 6 > Return True > End If > > ' If this is a GIF > If Left(lcString, 3) = "GIF" Then > cExtension = "GIF" > nNoFileType = 7 > Return True > End If > > ' If this is a EMF > If Mid(lcString, 42, 3) = "EMF" Then > cExtension = "EMF" > nNoFileType = 13 > Return True > End If > > ' If this is a WMF > If Left(lcString, 4) = Chr(215) + Chr(205) + Chr(198) + Chr(154) Then > cExtension = "WMF" > nNoFileType = 14 > Return True > End If > > ' If this is a TIF > If Left(lcString, 4) = Chr(77) + Chr(77) + Chr(0) + Chr(42) Then > cExtension = "TIF" > nNoFileType = 15 > Return True > End If > > ' If this is a PNG > If Left(lcString, 4) = Chr(137) + "PNG" Then > cExtension = "PNG" > nNoFileType = 12 > Return True > End If > > ' If this is a BMP > If Left(lcString, 2) = "BM" Then > cExtension = "BMP" > nNoFileType = 16 > Return True > End If > > ' If this is a SWF > If Left(lcString, 3) = "CWS" And Asc(Mid(lcString, 4, 1)) < 16 Then > cExtension = "SWF" > nNoFileType = 8 > Return True > End If > > ' If this is a SWF > If Left(lcString, 3) = "FWS" And Asc(Mid(lcString, 4, 1)) < 16 Then > cExtension = "SWF" > nNoFileType = 8 > Return True > End If > > ' If this is a XML > If UCase(Left(lcString, 6)) = "<?XML " Then > cExtension = "XML" > nNoFileType = 10 > Return True > End If > > ' If this is a DOC > If Left(lcString, 8) = Chr(208) + Chr(207) + Chr(17) + Chr(224) + Chr(161) + Chr(177) + Chr(26) + Chr(225) Then > cExtension = "DOC" > nNoFileType = 1 > Return True > End If > > ' If this is a PDF > If UCase(Left(lcString, 5)) = "%PDF-" Then > cExtension = "PDF" > nNoFileType = 2 > Return True > End If > > ' If this is a Excel > If Left(lcString, 8) = Chr(208) + Chr(207) + Chr(17) + Chr(224) + Chr(161) + Chr(177) + Chr(26) + Chr(225) Then > cExtension = "XLS" > nNoFileType = 3 > Return True > End If > > ' If this is a Microsoft Office 2007 document > If Left(lcString, 14) = Chr(80) + Chr(75) + Chr(3) + Chr(4) + Chr(20) + Chr(0) + Chr(6) + Chr(0) + _ > Chr(8) + Chr(0) + Chr(0) + Chr(0) + Chr(33) + Chr(0) Then > > ' If we have a temporary directory > If oApp.cTempDir.Length > 0 Then > > ' Get a temporary file name > lcDirectory = oApp.GenerateFileName() > > ' Get the full long directory name > lcDirectory = oApp.cTempDir + lcDirectory > > ' If we can create a temporary directory under Temp > If oApp.CreateDirectory(lcDirectory) Then > > ' Zip class needs an extension, otherwise, it will try to zip a file name ending with .zip > loFileFunction.cSource = lcFile > loFileFunction.cDestination = lcFile + ".zip" > loFileFunction.lLogError = False > If loFileFunction.CopyFile() Then > > ' If we can unzip the file > loZip.cFile = lcFile + ".zip" > loZip.cDirectory = lcDirectory > loZip.lUseCommandPrompt = True > If loZip.Unzip() Then > > ' Delete the temporary file > If Not loFileFunction.DeleteFile(lcFile + ".zip", False) Then > End If > > ' If we can load the Xml > If loXml.LoadXmlFromFile(lcDirectory + "\[Content_Types].xml") Then > > ' Delete the temporary files which were created in the temporary directory > loFileDirectory.cDirectory = lcDirectory > loFileDirectory.GetFile() > If Not loFileDirectory.DeleteFiles() Then > End If > > ' Delete the temporary directory > If Not loDirectoryFunction.DeleteDirectory(lcDirectory) Then > End If > > ' If we can add the namespace > If loXml.AddNamespace("http://schemas.openxmlformats.org/package/2006/content-types", "ns") Then > > ' If the attribute exists > If loXml.IsXMLNodeAttribute("//ns:Types/ns:Override[1]", "PartName") Then > > ' Get the value of the attribute > If loXml.GetXMLNodeAttributeValue("//ns:Types/ns:Override[1]", "PartName") Then > lcValue = loXml.cNodeAttribute > > ' Based on the type > Select Case lcValue > > ' Word > Case "/word/document.xml" > cExtension = "DOCX" > nNoFileType = 17 > Return True > > ' Excel > Case "/xl/workbook.xml" > cExtension = "XLSX" > nNoFileType = 18 > Return True > > ' PowerPoint > Case "/ppt/presentation.xml" > cExtension = "PPTX" > nNoFileType = 19 > Return True > > Case Else > Return False > > End Select > > Else > Return False > End If > > Else > Return False > End If > > Else > Return False > End If > > Else > Return False > End If > > Else > Return False > End If > > Else > Return False > End If > > Else > Return False > End If > > Else > Return False > End If > > Return False > End If > > ' If this is a ZIP > If Left(lcString, 4) = "PK" + Chr(3) + Chr(4) Then > cExtension = "ZIP" > nNoFileType = 9 > Return True > End If > > ' If this is a Windows AVI Video > If Left(lcString, 4) = Chr(82) + Chr(73) + Chr(70) + Chr(70) And _ > Mid(lcString, 9, 8) = Chr(65) + Chr(86) + Chr(73) + Chr(32) + Chr(76) + Chr(73) + Chr(83) + Chr(84) Then > cExtension = "AVI" > nNoFileType = 4 > Return True > End If > > ' If this is a Powerpoint file > If Mid(lcString, 513, 4) = Chr(160) + Chr(70) + Chr(29) + Chr(240) Then > cExtension = "PPT" > nNoFileType = 5 > Return True > End If > > ' If we have not found any type with the binary approach, we will try to rely on the extension > lnLocation = oApp.RAt(".", lcFile) > > ' If we have found the extension > If lnLocation > 0 Then > > ' Get the extension > lcExtension = Mid(lcFile, lnLocation + 1) > > ' Make it uppercase > lcExtension = UCase(lcExtension) > > ' If this is a TXT file > If lcExtension = "TXT" Then > cExtension = "TXT" > nNoFileType = 11 > Return True > End If > > End If > > Return True > End Function > > End Class > >End Namespace >