예제 #1
0
        private void PreviewFileFromPakEntryInfo(PakEntryInfo pakEntry)
        {
            using (var pr = new PakReader(pakEntry.PakFile))
            {
                switch (GetPreviewTypeFromFilename(pakEntry.EntryFilename))
                {
                case PreviewType.Text:
                    using (var ms = new MemoryStream(pr.GetFile(pakEntry.EntryFilename)))
                    {
                        var text = new StreamReader(ms).ReadToEnd();
                        ShowTextViewer(text);
                    }
                    break;

                case PreviewType.Html:
                    using (var ms = new MemoryStream(pr.GetFile(pakEntry.EntryFilename)))
                    {
                        try
                        {
                            var text = EncryptedHtml.DecodeToString(pakEntry.EntryFilename, ms);
                            ShowTextViewer(text);
                        }
                        catch {
                            // maybe not encrypted, show raw text
                            ms.Seek(0, SeekOrigin.Begin);
                            var text = new StreamReader(ms).ReadToEnd();
                            ShowTextViewer(text);
                        }
                    }
                    break;

                case PreviewType.Xml:
                    using (var ms = new MemoryStream(pr.GetFile(pakEntry.EntryFilename)))
                    {
                        var text = new StreamReader(new AionXmlStreamReader(ms, true)).ReadToEnd();
                        ShowTextViewer(text);
                    }
                    break;

                case PreviewType.Image:
                    using (var ms = new MemoryStream(pr.GetFile(pakEntry.EntryFilename)))
                    {
                        ShowImageViewer(ms);
                    }
                    break;

                case PreviewType.Cgf:
                    using (var ms = new MemoryStream(pr.GetFile(pakEntry.EntryFilename)))
                    {
                        ShowCgfViewer(new CgfLoader(ms));
                    }
                    break;

                default:
                    break;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Extract all files from absolute path.
        /// </summary>
        /// <param name="fullpath">Absolute path to a file in a PAK archive.</param>
        public void ExtractFile(string fullpath)
        {
            string pakFilePath = Regex.Match(fullpath, ".*.pak").Value;
            string fileMatch   = Path.GetFileName(Regex.Replace(fullpath, ".*.pak", "").Trim());

            PakReader?.Dispose();
            PakReader = new PakReader(pakFilePath);
            byte[] fileBytes = PakReader.GetFile(fileMatch);
            Encdec.ConsoleInfo.LogWait(Level.Info, "{Extract} " + fileMatch);
            if (fileBytes != null)
            {
                FileInfo f = new FileInfo(Path.Combine(Program.Arguments.Input,
                                                       Path.GetFileNameWithoutExtension(pakFilePath), fileMatch).Replace("/", "\\"));
                f.Directory.Create();
                if (!File.Exists(f.FullName))
                {
                    File.WriteAllBytes(f.FullName, fileBytes);
                }
                else
                {
                    int    idx = 1;
                    string newPath;
                    while (File.Exists(newPath = Path.Combine(f.Directory.FullName,
                                                              Path.GetFileNameWithoutExtension(f.Name) + "_" + idx + f.Extension)))
                    {
                        idx++;
                    }
                    File.WriteAllBytes(newPath, fileBytes);
                }
            }
        }
예제 #3
0
파일: Form1.cs 프로젝트: xvanick1/monono2
        private void M_treeView_ItemDrag(object sender, ItemDragEventArgs e)
        {
            var node = e.Item as TreeNode;

            if (node == null)
            {
                return;
            }

            // TODO - drag start immediately copies the file, even if dragging within the app. should only copy if needed.
            // TODO - drag directory

            List <string> selection = new List <string>();

            string tempfile = null;
            string tempdir  = null;
            var    file     = node.Tag as FileInfo;

            if (file != null)
            {
                // just copy the file
                selection.Add(file.FullName);
            }
            else
            {
                var pei = node.Tag as PakEntryInfo;
                if (pei != null)
                {
                    if (string.IsNullOrWhiteSpace(pei.EntryFilename) || pei.EntryFilename.EndsWith("\\") ||
                        pei.EntryFilename.EndsWith("/"))
                    {
                        return;
                    }

                    tempdir  = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
                    tempfile = Path.Combine(tempdir, pei.EntryFilename.Replace("/", "\\"));
                    tempdir  = Path.GetDirectoryName(tempfile);

                    Directory.CreateDirectory(tempdir);

                    var pr = new PakReader(pei.PakFile);
                    File.WriteAllBytes(tempfile, pr.GetFile(pei.EntryFilename));
                    selection.Add(tempfile);
                }
            }

            if (!selection.Any())
            {
                return;
            }

            DataObject data = new DataObject(DataFormats.FileDrop, selection.ToArray());

            DoDragDrop(data, DragDropEffects.Copy);

            if (tempfile != null)
            {
                try
                {
                    File.Delete(tempfile);
                    Directory.Delete(tempdir);
                }
                catch { }
            }
        }