예제 #1
0
        private static void CopyFileOrDirectory(Logger logger, string sourceDir, string root, string path)
        {
            // Root path not handled
            if (root.Length == 0)
            {
                throw new NotSupportedException();
            }

            try
            {
                var zipFile = new ZipFile(sourceDir);
                foreach (var zipEntry in zipFile.GetAllEntries())
                {
                    var zipFilename = zipEntry.FilenameInZip;
                    if (!zipFilename.StartsWith(root))
                    {
                        continue;
                    }

                    // Get filename without leading "assets/data"
                    var assetFilename = zipFilename.Substring(root.Length);

                    var fullPath      = path + assetFilename;
                    var directoryName = VirtualFileSystem.GetParentFolder(fullPath);

                    try
                    {
                        if (directoryName != string.Empty)
                        {
                            ApplicationData.CreateDirectory(directoryName);
                        }
                    }
                    catch (IOException)
                    {
                    }

                    using (var output = ApplicationData.OpenStream(fullPath, VirtualFileMode.Create, VirtualFileAccess.Write))
                        zipFile.ExtractFile(zipEntry, output);
                }
            }
            catch (IOException ex)
            {
                logger.Info("I/O Exception", ex);
            }
        }