From e9f2953b4ed579468b9974f64f0327900ba995a7 Mon Sep 17 00:00:00 2001 From: matsuo Date: Wed, 24 Nov 2021 09:38:10 +0900 Subject: [PATCH] =?UTF-8?q?#11=20=E6=97=A2=E5=AD=98=E3=81=AE=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=89=A9=E3=81=8C=E3=83=86=E3=83=B3=E3=83=9D=E3=83=A9?= =?UTF-8?q?=E3=83=AA=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E3=81=AB=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E3=81=99=E3=82=8B=E3=81=A8=E3=82=A2=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=82=B1=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=8C=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 再修正:異なるドライブの時は、フォルダの移動に失敗します。 ディレクトリ移動を別関数 --- GetADoc/RunBatch.cs | 57 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/GetADoc/RunBatch.cs b/GetADoc/RunBatch.cs index 3f53fc2..3ad9755 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);// 追加: 最後に元のフォルダを削除する + } } } -- 2.22.0