Пример #1
0
        public static void Export(
            Config config,
            Option option,
            ArchiveRoot root)
        {
            Convert(config, option, root);

            BeginExport(option.Output);

            foreach (var item in root.Items)
            {
                // 出力先が空の場合は失敗している

                if (!string.IsNullOrEmpty(item.Dest))
                {
                    Register(item.Name, item.Dest);
                }
            }

            EndExport();

            foreach (var item in root.Items)
            {
                if (File.Exists(item.Dest))
                {
                    File.Delete(item.Dest);
                }
            }
        }
Пример #2
0
        static void Convert(
            Config config,
            Option option,
            ArchiveRoot root)
        {
            // ツールディレクトリをフルパスに変換
            var toolDir = option.ToolDir;
            if (!Path.IsPathRooted(option.ToolDir))
            {
                toolDir = Path.GetDirectoryName(option.Input);
                toolDir = Path.Combine(toolDir, option.ToolDir);
                toolDir = Path.GetFullPath(toolDir);
            }

            foreach (var item in root.Items)
            {
                if (!File.Exists(item.Source))
                {
                    throw new FileNotFoundException();
                }

                try
                {
                    var cmdItem = config[item.Type];

                    // 一時ファイル名作成
                    var dir = Path.GetTempFileName();
                    var file = Path.GetTempFileName();
                    item.Dest = Path.Combine(dir, file);

                    // ソースデータをフルパスに変換
                    var src = item.Source;
                    if (!Path.IsPathRooted(item.Source))
                    {
                        var baseDir = Path.GetDirectoryName(option.Input);
                        src = Path.Combine(baseDir, item.Source);
                        src = Path.GetFullPath(src);
                    }

                    if (cmdItem == null)
                    {
                        // そのままコピー
                        File.Copy(src, item.Dest);
                    }
                    else
                    {
                        cmdItem.DoCmd(
                            toolDir,
                            src,
                            item.Dest,
                            item.Option);
                    }

                    exportableFileNum++;

                    // 最大ファイルサイズ取得
                    var fi = new FileInfo(item.Dest);
                    maxFileSize = (maxFileSize > fi.Length ? maxFileSize : fi.Length);

                    item.Size = (int)fi.Length;
                }
                catch (Exception e)
                {
                    // TODO

                    // 失敗したので、出力先は空にする
                    item.Dest = "";
                }
            }
        }