private void LoadArchive() { if (_archive != null) { _archive.Dispose(); _archive = null; } Text = "Archive - []"; listView.Items.Clear(); if (_info == null) { return; } Text = $"Archive - [{_info.FullName}]"; _archive = PffArchive.Open(_info); var entries = _archive.Entries; listView.BeginUpdate(); foreach (var entry in entries) { var name = entry.FilePath; var lvi = new ListViewItem(name); lvi.SubItems.Add(entry.PackedTimeUtc.ToLocalTime().ToString(CultureInfo.CurrentCulture)); lvi.SubItems.Add(name.IndexOfAny(Path.GetInvalidFileNameChars()) != -1 ? "" : Path.GetExtension(entry.FilePath)?.Substring(1)); lvi.SubItems.Add(entry.FileSize.ToString()); listView.Items.Add(lvi); } listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); listView.EndUpdate(); ClientSize = new Size(listView.PreferredWidth(), ClientSize.Height); }
private static void Main(string[] args) { FileInfo inputFile = null; var extract = false; var list = false; var i = 0; while (i < args.Length) { var arg = args[i++]; switch (arg) { case "-l": list = true; break; case "-e": extract = true; break; default: if (File.Exists(arg)) { inputFile = new FileInfo(arg); } else { throw new ArgumentException($"Program args, unknown/missing file: {arg}"); } break; } } if (inputFile == null) { throw new ArgumentException("No input file was specified."); } using (var archive = PffArchive.Open(inputFile)) { if (list) { foreach (var pffEntry in archive.Entries) { Console.WriteLine(pffEntry.FilePath); } } if (extract) { if (!CanWriteToFolder(inputFile.DirectoryName)) { throw new Exception("Cannot write to archive folder."); } var archiveName = Path.GetFileNameWithoutExtension(inputFile.Name); var extractDir = !string.IsNullOrWhiteSpace(archiveName) ? archiveName : "EXTRACTED"; Directory.CreateDirectory(extractDir); foreach (var pffEntry in archive.Entries) { var filePath = Path.Combine(extractDir, pffEntry.FilePath); var contents = pffEntry.GetContents(); if (contents != null) { File.WriteAllBytes(filePath, contents); File.SetLastWriteTime(filePath, pffEntry.PackedTimeUtc.ToLocalTime()); } } } } }