diff --git a/GetADoc/RunBatch.cs b/GetADoc/RunBatch.cs
index 3f53fc213b9bfbf1668ef40f6c1f57ce4d82584c..3ad9755a18be61498e622e26e5a22b856c129546 100644
--- a/GetADoc/RunBatch.cs
+++ b/GetADoc/RunBatch.cs
@@ -95,19 +95,66 @@ namespace GetADoc
static public void MoveProduct(bool icon, bool sepa,
string fileName, string tempPath, string filePath)
{
- File.Move(System.IO.Path.Combine(tempPath, fileName + ".adoc"), filePath + fileName + ".adoc");
+ /*
+ 個別移動ではなく、フォルダ全体を移動した方がよいが、とりあえずそのまま。理由:内部コマンドで生成物が増えたらまた追加修正が必要である。
+ */
+ File.Move(System.IO.Path.Combine(tempPath, fileName + ".adoc"), filePath + fileName + ".adoc");
File.Move(System.IO.Path.Combine(tempPath, "config.adoc"), System.IO.Path.Combine(filePath, "config.adoc"));
- Directory.Move(System.IO.Path.Combine(tempPath, "Images"), System.IO.Path.Combine(filePath, "Images"));
+ MoveDirectory(System.IO.Path.Combine(tempPath, "Images"), System.IO.Path.Combine(filePath, "Images")); // Directory.Move -> local MoveDirectory
if (icon == true)
{
- Directory.Move(System.IO.Path.Combine(tempPath, "icons"), System.IO.Path.Combine(filePath, "icons"));
+ MoveDirectory(System.IO.Path.Combine(tempPath, "icons"), System.IO.Path.Combine(filePath, "icons"));// Directory.Move -> local MoveDirectory
}
if (sepa == true)
{
File.Move(System.IO.Path.Combine(tempPath, "IncDoc.adoc"), System.IO.Path.Combine(filePath, "IncDoc.adoc"));
- Directory.Move(System.IO.Path.Combine(tempPath, "Sub_First"), System.IO.Path.Combine(filePath, "Sub_First"));
- Directory.Move(System.IO.Path.Combine(tempPath, "Sub_Second"), System.IO.Path.Combine(filePath, "Sub_Second"));
+ MoveDirectory(System.IO.Path.Combine(tempPath, "Sub_First"), System.IO.Path.Combine(filePath, "Sub_First"));// Directory.Move -> local MoveDirectory
+ MoveDirectory(System.IO.Path.Combine(tempPath, "Sub_Second"), System.IO.Path.Combine(filePath, "Sub_Second"));// Directory.Move -> local MoveDirectory
}
}
+
+ ///
+ /// ディレクトリを移動する。
+ ///
+ /// 移動するディレクトリ
+ /// 移動先のディレクトリ
+ /*
+ ref: https://johobase.com/copy-directory-csharp/ [ディレクトリ(フォルダー)をコピーする [C#]]
+ 最後に追加して、移動元のディレクトリをサブディレクトリ、ファイルを含めて削除
+ Directory.Delete(sourceDirName, true);
+ */
+ public static void MoveDirectory(string sourceDirName, string destDirName)
+ {
+ // コピー先のディレクトリがないかどうか判定する
+ if (!Directory.Exists(destDirName))
+ {
+ // コピー先のディレクトリを作成する
+ Directory.CreateDirectory(destDirName);
+ }
+ // コピー元のディレクトリの属性をコピー先のディレクトリに反映する
+ File.SetAttributes(destDirName, File.GetAttributes(sourceDirName));
+
+ // ディレクトリパスの末尾が「\」でないかどうかを判定する
+ if (!destDirName.EndsWith(Path.DirectorySeparatorChar.ToString()))
+ {
+ // コピー先のディレクトリ名の末尾に「\」を付加する
+ destDirName = destDirName + Path.DirectorySeparatorChar;
+ }
+ // コピー元のディレクトリ内のファイルを取得する
+ string[] files = Directory.GetFiles(sourceDirName);
+ foreach (string file in files)
+ {
+ // コピー元のディレクトリにあるファイルをコピー先のディレクトリにコピーする
+ File.Copy(file, destDirName + Path.GetFileName(file), true);
+ }
+ // コピー元のディレクトリのサブディレクトリを取得する
+ string[] dirs = Directory.GetDirectories(sourceDirName);
+ foreach (string dir in dirs)
+ {
+ // コピー元のディレクトリのサブディレクトリで自メソッド(CopyDirectory)を再帰的に呼び出す
+ MoveDirectory(dir, destDirName + Path.GetFileName(dir));
+ }
+ Directory.Delete(sourceDirName, true);// 追加: 最後に元のフォルダを削除する
+ }
}
}