Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
BSA Prospector - Form1.vb

Form1.vb

Caricato da: Totem
Scarica il programma completo

  1. Public Class Form1
  2.  
  3.     Private MainArchive As New BsaArchive()
  4.  
  5.     Private Shared Function FormatSize(ByVal OriginalSize As UInt32) As String
  6.         Dim Order As Double = Math.Log10(OriginalSize)
  7.  
  8.         If Order < 3 Then
  9.             Return String.Format("{0:N0} B", OriginalSize)
  10.         ElseIf Order < 6 Then
  11.             Return String.Format("{0:N2} KB", OriginalSize / 1000)
  12.         ElseIf Order < 9 Then
  13.             Return String.Format("{0:N2} MB", OriginalSize / 1000000.0)
  14.         Else
  15.             Return String.Format("{0:N2} GB", OriginalSize / 1000000000.0)
  16.         End If
  17.     End Function
  18.  
  19.     Private Sub strOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles strOpen.Click
  20.         If FOpenDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
  21.             Try
  22.                 Dim Info As New IO.FileInfo(FOpenDialog.FileName)
  23.  
  24.                 MainArchive.Open(FOpenDialog.FileName)
  25.  
  26.                 lstProperties.Items.Clear()
  27.                 With lstProperties
  28.                     .AddItem("Data creazione", Info.CreationTime.ToLongDateString())
  29.                     .AddItem("Ultima modifica", Info.LastWriteTime.ToLongDateString())
  30.                     .AddItem("Dimensione", Info.Length & " bytes")
  31.                     .AddItem("Numero cartelle", MainArchive.FoldersCount)
  32.                     .AddItem("Numero files", MainArchive.FilesCount)
  33.                     .AddItem("Versione", MainArchive.Version)
  34.                     .AddItem("Compressione", If((MainArchive.ArchiveFlags And BsaArchiveFlags.CompressionEnabled) = BsaArchiveFlags.CompressionEnabled, "Sì", "No"))
  35.  
  36.                     Dim FileTypes As New System.Text.StringBuilder()
  37.                     For Each Value As BsaFileTypeFlags In [Enum].GetValues(GetType(BsaFileTypeFlags))
  38.                         If (MainArchive.FileTypeFlags And Value) = Value Then
  39.                             FileTypes.Append([Enum].GetName(GetType(BsaFileTypeFlags), Value) & ", ")
  40.                         End If
  41.                     Next
  42.                     .AddItem("Tipi file presenti", FileTypes.ToString())
  43.                 End With
  44.  
  45.                 For Each Folder As BsaArchive.BsaFolder In MainArchive.Folders
  46.                     Dim FolderNode As New TreeNode(Folder.Name)
  47.                     FolderNode.ImageKey = "folder"
  48.                     For Each File As BsaArchive.BsaFile In Folder.Files
  49.                         Dim FileNode As New TreeNode(String.Format("{0} ({1})", File.Name, FormatSize(File.Size)))
  50.                         If (MainArchive.IsCompressionEnabled And File.Size < 2 ^ 31) Or (MainArchive.IsCompressionEnabled = False And File.Size >= 2 ^ 31) Then
  51.                             FileNode.ImageKey = "compressed"
  52.                         Else
  53.                             FileNode.ImageKey = "plainfile"
  54.                         End If
  55.                         FolderNode.Nodes.Add(FileNode)
  56.                     Next
  57.                     trwArchive.Nodes.Add(FolderNode)
  58.                 Next
  59.             Catch Ex As Exception
  60.                 MessageBox.Show( _
  61.                     String.Format("Si è verificato un errore durante la lettura dell'archivio:{0}{0}Tipologia errore: {1}{0}Messaggio: {2}", _
  62.                     Environment.NewLine, Ex.GetType().Name, Ex.Message), Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
  63.             End Try
  64.         End If
  65.     End Sub
  66.  
  67.     Private Sub strClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles strClose.Click
  68.         If MainArchive IsNot Nothing Then
  69.             MainArchive.Close()
  70.             lstProperties.Items.Clear()
  71.             trwArchive.Nodes.Clear()
  72.             MainArchive = Nothing
  73.         End If
  74.     End Sub
  75.  
  76.     Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
  77.         If MainArchive IsNot Nothing Then
  78.             MainArchive.Close()
  79.             MainArchive = Nothing
  80.         End If
  81.     End Sub
  82.  
  83.     Private Sub trwArchive_AfterCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles trwArchive.AfterCheck
  84.         If e.Node.ImageKey = "folder" Then
  85.             For Each Child As TreeNode In e.Node.Nodes
  86.                 Child.Checked = e.Node.Checked
  87.             Next
  88.         End If
  89.     End Sub
  90.  
  91.     Private Sub strExtractChecked_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles strExtractChecked.Click
  92.         If MainArchive Is Nothing Then
  93.             MessageBox.Show("Nessun archivio aperto!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  94.             Exit Sub
  95.         End If
  96.  
  97.         If FolderBrowserDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
  98.             Dim SelFolder As String = FolderBrowserDialog.SelectedPath
  99.             Dim CurFolder As String
  100.             Dim CheckedItems As Int32 = 0
  101.  
  102.             For Each FolderNode As TreeNode In trwArchive.Nodes
  103.                 For Each FileNode As TreeNode In FolderNode.Nodes
  104.                     If FileNode.Checked Then
  105.                         CheckedItems += 1
  106.                     End If
  107.                 Next
  108.             Next
  109.             prgExtraction.Maximum = CheckedItems
  110.             prgExtraction.Value = 0
  111.  
  112.             CurFolder = SelFolder
  113.             For Each FolderNode As TreeNode In trwArchive.Nodes
  114.                 If strCreateFolders.Checked Then
  115.                     CurFolder = SelFolder & "\" & FolderNode.Text
  116.                     If Not IO.Directory.Exists(CurFolder) Then
  117.                         IO.Directory.CreateDirectory(CurFolder)
  118.                     End If
  119.                 End If
  120.                 For Each FileNode As TreeNode In FolderNode.Nodes
  121.                     If FileNode.Checked Then
  122.                         Try
  123.                             MainArchive.ExtractFile(MainArchive.Folders(FolderNode.Index).Files(FileNode.Index), CurFolder)
  124.                         Catch Ex As Exception
  125.                             MessageBox.Show("Si è verificato un errore durante l'estrazione del file " & FileNode.Text & ". I dati potrebbero essere corrotti. Il programma continuerà comunque ad estrarre gli altri file.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  126.                         End Try
  127.                         prgExtraction.Value += 1
  128.                         Application.DoEvents()
  129.                     End If
  130.                 Next
  131.             Next
  132.  
  133.             MessageBox.Show("Estrazione completata!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  134.         End If
  135.     End Sub
  136.  
  137.     Private Sub strExtractAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles strExtractAll.Click
  138.         If MainArchive Is Nothing Then
  139.             MessageBox.Show("Nessun archivio aperto!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  140.             Exit Sub
  141.         End If
  142.  
  143.         If FolderBrowserDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
  144.             Dim SelFolder As String = FolderBrowserDialog.SelectedPath
  145.             Dim CurFolder As String
  146.  
  147.             prgExtraction.Maximum = MainArchive.FilesCount
  148.             prgExtraction.Value = 0
  149.  
  150.             CurFolder = SelFolder
  151.             For Each FolderNode As TreeNode In trwArchive.Nodes
  152.                 If strCreateFolders.Checked Then
  153.                     CurFolder = SelFolder & "\" & FolderNode.Text
  154.                     If Not IO.Directory.Exists(CurFolder) Then
  155.                         IO.Directory.CreateDirectory(CurFolder)
  156.                     End If
  157.                 End If
  158.                 For Each FileNode As TreeNode In FolderNode.Nodes
  159.                     Try
  160.                         MainArchive.ExtractFile(MainArchive.Folders(FolderNode.Index).Files(FileNode.Index), CurFolder)
  161.                     Catch Ex As Exception
  162.                         MessageBox.Show("Si è verificato un errore durante l'estrazione del file " & FileNode.Text & ". I dati potrebbero essere corrotti. Il programma continuerà comunque ad estrarre gli altri file.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  163.                     End Try
  164.                     prgExtraction.Value += 1
  165.                     Application.DoEvents()
  166.                 Next
  167.             Next
  168.  
  169.             MessageBox.Show("Estrazione completata!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  170.         End If
  171.     End Sub
  172.  
  173.     Private Sub strExtractSchema_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles strExtractSchema.Click
  174.         If MainArchive Is Nothing Then
  175.             MessageBox.Show("Nessun archivio aperto!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  176.             Exit Sub
  177.         End If
  178.  
  179.         If FSaveDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
  180.             Dim Schema As New IO.StreamWriter(FSaveDialog.FileName)
  181.  
  182.             Schema.WriteLine("Offset      Size        File name")
  183.             For Each Folder As BsaArchive.BsaFolder In MainArchive.Folders
  184.                 Schema.WriteLine("                        Start Folder: {0}", Folder.Name)
  185.                 For Each File As BsaArchive.BsaFile In Folder.Files
  186.                     Schema.WriteLine("0x{0:X8}  0x{1:X8}  {2}", File.Offset, File.Size, Folder.Name & "\" & File.Name)
  187.                 Next
  188.             Next
  189.  
  190.             Schema.Close()
  191.         End If
  192.     End Sub
  193.  
  194.     Private Sub strExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles strExit.Click
  195.         Me.Close()
  196.     End Sub
  197. End Class