コード例 #1
0
 static SizeComparison CheckZip(Folder zip, Folder folder)
 {
     SizeComparison size = new SizeComparison();
     foreach (FolderItem sItem in zip.Items())
     {
         FolderItem dItem = null;
         foreach (FolderItem item in folder.Items())
             if (item.Name == sItem.Name)
             {
                 dItem = item;
                 break;
             }
         if (dItem == null)
             continue;
         if (sItem.IsFolder)
         {
             if (!dItem.IsFolder)
                 continue;
             Folder sFolder = sItem.GetFolder;
             Folder dFolder = dItem.GetFolder;
             SizeComparison fSize = CheckZip(sFolder, dFolder);
             size.sSize += fSize.sSize;
             size.dSize += fSize.dSize;
         }
         else
         {
             if (dItem.IsFolder)
                 continue;
             size.sSize += (UInt64)sItem.Size;
             size.dSize += (UInt64)dItem.Size;
         }
     }
     return size;
 }
コード例 #2
0
 /// <summary>
 /// All paths must be absolute
 /// </summary>
 /// <param name="sDir"></param>
 /// <param name="dZip"></param>
 /// <returns></returns>
 public static bool Zip(string sDir, string dZip)
 {
     if (!Directory.Exists(sDir))
         return false;
     FileStream file = File.Create(dZip);
     file.Write(new byte[] { 80, 75, 5, 6 }, 0, 4);
     file.Write(new byte[18], 0, 18);
     file.Close();
     var shellAppType = Type.GetTypeFromProgID("Shell.Application");
     var shell = Activator.CreateInstance(shellAppType);
     Folder source = (Folder)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new[] { sDir });
     Folder destination = (Folder)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new[] { dZip });
     destination.CopyHere(source.Items(), 16);
     ulong lastSize = 0;
     int timeOut = 0;
     SizeComparison rSize = new SizeComparison();
     while ((rSize.sSize != rSize.dSize || rSize.sSize == 0 || rSize.dSize == 0) && timeOut < 10)
     {
         rSize = CheckZip(source, destination);
         if (lastSize != rSize.dSize && rSize.dSize != 0)
         {
             lastSize = rSize.dSize;
             timeOut = 0;
         }
         Thread.Sleep(1000);
     }
     return (rSize.sSize == rSize.dSize);
 }
コード例 #3
0
        /// <summary>
        /// All paths must be absolute
        /// </summary>
        /// <param name="sDir"></param>
        /// <param name="dZip"></param>
        /// <returns></returns>
        public static bool Zip(string sDir, string dZip)
        {
            if (!Directory.Exists(sDir))
            {
                return(false);
            }
            FileStream file = File.Create(dZip);

            file.Write(new byte[] { 80, 75, 5, 6 }, 0, 4);
            file.Write(new byte[18], 0, 18);
            file.Close();
            var    shellAppType = Type.GetTypeFromProgID("Shell.Application");
            var    shell        = Activator.CreateInstance(shellAppType);
            Folder source       = (Folder)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new[] { sDir });
            Folder destination  = (Folder)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new[] { dZip });

            destination.CopyHere(source.Items(), 16);
            ulong          lastSize = 0;
            int            timeOut  = 0;
            SizeComparison rSize    = new SizeComparison();

            while ((rSize.sSize != rSize.dSize || rSize.sSize == 0 || rSize.dSize == 0) && timeOut < 10)
            {
                rSize = CheckZip(source, destination);
                if (lastSize != rSize.dSize && rSize.dSize != 0)
                {
                    lastSize = rSize.dSize;
                    timeOut  = 0;
                }
                Thread.Sleep(1000);
            }
            return(rSize.sSize == rSize.dSize);
        }
コード例 #4
0
        /// <summary>
        /// All paths must be absolute
        /// </summary>
        /// <param name="sZip"></param>
        /// <param name="dDir"></param>
        /// <returns></returns>
        public static bool UnZip(string sZip, string dDir)
        {
            sZip = Path.GetFullPath(sZip);
            dDir = Path.GetFullPath(dDir);
            if (!File.Exists(sZip))
            {
                return(false);
            }
            if (!Directory.Exists(dDir))
            {
                Directory.CreateDirectory(dDir);
            }
            //platform independent compilation
            var    shellAppType = Type.GetTypeFromProgID("Shell.Application");
            var    shell        = Activator.CreateInstance(shellAppType);
            Folder source       = (Folder)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new[] { sZip });
            Folder destination  = (Folder)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new[] { dDir });

            //Shell shell = new Shell();
            //Folder destinationFolder = shell.NameSpace(destination);
            //Folder sourceZip = shell.NameSpace(source);
            foreach (var item in source.Items())
            {
                destination.CopyHere(item, 16); //4 | 16 | 512 | 1024);
            }
            SizeComparison rSize = CheckZip(source, destination);

            return(rSize.sSize == rSize.dSize);
        }
コード例 #5
0
        static SizeComparison CheckZip(Folder zip, Folder folder)
        {
            SizeComparison size = new SizeComparison();

            foreach (FolderItem sItem in zip.Items())
            {
                FolderItem dItem = null;
                foreach (FolderItem item in folder.Items())
                {
                    if (item.Name == sItem.Name)
                    {
                        dItem = item;
                        break;
                    }
                }
                if (dItem == null)
                {
                    continue;
                }
                if (sItem.IsFolder)
                {
                    if (!dItem.IsFolder)
                    {
                        continue;
                    }
                    Folder         sFolder = sItem.GetFolder;
                    Folder         dFolder = dItem.GetFolder;
                    SizeComparison fSize   = CheckZip(sFolder, dFolder);
                    size.sSize += fSize.sSize;
                    size.dSize += fSize.dSize;
                }
                else
                {
                    if (dItem.IsFolder)
                    {
                        continue;
                    }
                    size.sSize += (UInt64)sItem.Size;
                    size.dSize += (UInt64)dItem.Size;
                }
            }
            return(size);
        }