Beispiel #1
0
        public static PssgFile Open(Stream stream)
        {
            PssgFileType fileType = PssgFile.GetPssgType(stream);

            if (fileType == PssgFileType.Pssg)
            {
                return(PssgFile.ReadPssg(stream, fileType));
            }
            else if (fileType == PssgFileType.Xml)
            {
                return(PssgFile.ReadXml(stream, fileType));
            }
            else // CompressedPssg
            {
                string tempPath = "temp.pssg";
                try
                {
                    using (var fs = File.Open(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.Read))
                    {
                        // Decompress stream into temp file
                        using (GZipStream gZipStream = new GZipStream(stream, CompressionMode.Decompress, true))
                        {
                            gZipStream.CopyTo(fs);
                        }

                        // Determine the file type after inflate, add CompressedPssg to make compressed
                        fs.Seek(0, SeekOrigin.Begin);
                        fileType = GetPssgType(fs) + (int)PssgFileType.CompressedPssg;
                        PssgFile pFile = fileType switch
                        {
                            PssgFileType.CompressedPssg => PssgFile.ReadPssg(fs, fileType),
                            PssgFileType.CompressedXml => PssgFile.ReadXml(fs, fileType),
                            _ => throw new FileFormatException("This is not a pssg file.")
                        };

                        return(pFile);
                    }
                }
                finally
                {
                    // Attempt to delete the temporary file
                    try
                    {
                        File.Delete(tempPath);
                    }
                    catch { }
                }
            }
        }
Beispiel #2
0
        public static PssgFile Open(Stream stream)
        {
            PssgFileType fileType = PssgFile.GetPssgType(stream);

            if (fileType == PssgFileType.Pssg)
            {
                return(PssgFile.ReadPssg(stream, fileType));
            }
            else if (fileType == PssgFileType.Xml)
            {
                return(PssgFile.ReadXml(stream));
            }
            else // CompressedPssg
            {
                string tempPath = "temp.pssg";
                try
                {
                    FileStream fs = File.Open(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.Read);

                    // Decompress stream into temp file
                    using (stream)
                    {
                        using (GZipStream gZipStream = new GZipStream(stream, CompressionMode.Decompress))
                        {
                            gZipStream.CopyTo(fs);
                        }
                    }

                    // Read temp file, and close it
                    fs.Seek(0, SeekOrigin.Begin);
                    PssgFile pFile = PssgFile.ReadPssg(fs, fileType);

                    return(pFile);
                }
                finally
                {
                    // Attempt to delete the temporary file
                    try
                    {
                        File.Delete(tempPath);
                    }
                    catch { }
                }
            }
        }