Esempio n. 1
0
        public static StatusCode UnarchiveAllAndCreateDestinationFolderIfNotExist(string archiveFilename, ArchiveType archiveType, Models.FileTransportInfo transport, Common.Configurator Config, short ApplicationID, string password = null)
        {
            if (transport == null)
            {
                return(StatusCode.InvalidArgumentStatus("Transportation Information Not Specified to archive", Config, ApplicationID));
            }

            FileInfo archiveInfo = new System.IO.FileInfo(archiveFilename);

            if (archiveType == ArchiveType.GuessFromFileName)
            {
                switch (archiveInfo.Extension.ToUpper())
                {
                case ".ZIP":
                    archiveType = ArchiveType.Zip;
                    break;

                case ".TGZ":
                    archiveType = ArchiveType.TGZ;
                    break;

                case ".BZ2":
                    archiveType = ArchiveType.BZip2;
                    break;

                case ".GZ":
                    archiveType = ArchiveType.GZip;
                    break;

                case ".TAR":
                    archiveType = ArchiveType.Tar;
                    break;

                default:
                    return(StatusCode.InvalidArgumentStatus("File Extension Not supported for archiving", Config, ApplicationID));
                }
            }

            if (archiveType == ArchiveType.BZip2 || archiveType == ArchiveType.GZip)
            {
                if (transport.SourceIsDirectory)
                {
                    return(StatusCode.InvalidArgumentStatus("Multiple files are not supported in this compression type", Config, ApplicationID));
                }
            }
            if (archiveType != ArchiveType.Zip && string.IsNullOrEmpty(password) == false)
            {
                return(StatusCode.InvalidArgumentStatus("password is not supported on other than zip format", Config, ApplicationID));
            }
            string archiveFileDirectory = archiveInfo.Directory.FullName;
            string archiveName          = archiveInfo.Name;

            System.IO.Directory.CreateDirectory(transport.DestinationFolderName);
            switch (archiveType)
            {
            case ArchiveType.Zip:
                transport.SourceFolderName = archiveFileDirectory;
                transport.SourceFileName   = archiveName;
                Common.Archive.ZipArchive.Unzip(transport);
                break;

            case ArchiveType.BZip2:
                transport.SourceFolderName = archiveFileDirectory;
                transport.SourceFileName   = archiveName;
                Common.Archive.BZip2Archive.Extract(transport);
                break;

            case ArchiveType.GZip:
                transport.SourceFolderName = archiveFileDirectory;
                transport.SourceFileName   = archiveName;
                Common.Archive.GZipArchive.Extract(transport);
                break;

            case ArchiveType.Tar:
                transport.SourceFolderName = archiveFileDirectory;
                transport.SourceFileName   = archiveName;
                Common.Archive.TarArchive.Extract(transport);
                break;

            case ArchiveType.TGZ:
                transport.SourceFolderName = archiveFileDirectory;
                transport.SourceFileName   = archiveName;
                string originalDestinationFolder = transport.DestinationFolderName;
                string originalDestinationFile   = transport.DestinationFileName;
                transport.DestinationFolderName = Path.GetTempPath();
                transport.DestinationFileName   = archiveName.Substring(0, archiveName.Length - (archiveInfo.Extension.Length)) + ".tar";
                Common.Archive.GZipArchive.Extract(transport);
                Models.FileTransportInfo tarInfo = new Models.FileTransportInfo(null, transport.DestinationFolderName, transport.DestinationFileName, originalDestinationFolder, originalDestinationFile);
                Common.Archive.TarArchive.Extract(tarInfo);
                File.Delete(transport.DestinationFullName);
                break;
            }
            return(StatusCode.SUCCEED_STATUS);
        }
Esempio n. 2
0
        public static StatusCode Archive(string archiveFilename, ArchiveType archiveType, List <Models.FileTransportInfo> SourceFiles, Common.Configurator Config, short ApplicationID, string password = null)
        {
            if (SourceFiles == null || SourceFiles.Count == 0)
            {
                return(StatusCode.InvalidArgumentStatus("Source File Not Specified to archive", Config, ApplicationID));
            }

            FileInfo archiveInfo = new System.IO.FileInfo(archiveFilename);

            if (archiveType == ArchiveType.GuessFromFileName)
            {
                switch (archiveInfo.Extension.ToUpper())
                {
                case ".ZIP":
                    archiveType = ArchiveType.Zip;
                    break;

                case ".TGZ":
                    archiveType = ArchiveType.TGZ;
                    break;

                case ".BZ2":
                    archiveType = ArchiveType.BZip2;
                    break;

                case ".GZ":
                    archiveType = ArchiveType.GZip;
                    break;

                case ".TAR":
                    archiveType = ArchiveType.Tar;
                    break;

                default:
                    return(StatusCode.InvalidArgumentStatus("File Extension Not supported for archiving", Config, ApplicationID));
                }
            }
            if (archiveType == ArchiveType.BZip2 || archiveType == ArchiveType.GZip)
            {
                if (SourceFiles.Count > 1 || SourceFiles.Where(f => f.SourceIsDirectory).Count() > 0)
                {
                    return(StatusCode.InvalidArgumentStatus("Multiple files are not supported in this compression type", Config, ApplicationID));
                }
            }
            if (archiveType != ArchiveType.Zip && string.IsNullOrEmpty(password) == false)
            {
                return(StatusCode.InvalidArgumentStatus("password is not supported on other than zip format", Config, ApplicationID));
            }
            Models.FileTransportInfo transport = SourceFiles[0];
            string archiveFileDirectory        = archiveInfo.Directory.FullName;
            string archiveName = archiveInfo.Name;

            switch (archiveType)
            {
            case ArchiveType.Zip:
                Common.Archive.ZipArchive.Create(archiveFilename, SourceFiles, password);
                break;

            case ArchiveType.BZip2:
                transport.DestinationFolderName = archiveFileDirectory;
                transport.DestinationFileName   = archiveName;
                Common.Archive.BZip2Archive.Create(transport);
                break;

            case ArchiveType.GZip:
                transport.DestinationFolderName = archiveFileDirectory;
                transport.DestinationFileName   = archiveName;
                Common.Archive.GZipArchive.Create(transport);
                break;

            case ArchiveType.Tar:
                transport.DestinationFolderName = archiveFileDirectory;
                transport.DestinationFileName   = archiveName;
                Common.Archive.TarArchive.Create(transport);
                break;

            case ArchiveType.TGZ:
                transport.DestinationFolderName = Path.GetTempPath();
                transport.DestinationFileName   = archiveName.Substring(0, archiveName.Length - (archiveInfo.Extension.Length)) + ".tar";
                Common.Archive.TarArchive.Create(transport);
                Models.FileTransportInfo tgzInfo = new Models.FileTransportInfo(null, transport.DestinationFolderName, transport.DestinationFileName, archiveFileDirectory, archiveName);
                Common.Archive.GZipArchive.Create(tgzInfo);
                break;
            }



            return(StatusCode.SUCCEED_STATUS);
        }