Exemple #1
0
        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);
        }
Exemple #2
0
        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());
                        }
                    }
                }
            }
        }