以前の内容は空であるが新しいフォルダーの場合、フォルダーをそれ自体の内部に移動したいと仮定すると、コードを使用してどのように移動するのが最善でしょうか。通常、エクスプローラーでは、フォルダーのコンテンツを切り取って、元のフォルダー内に作成された新しいフォルダーに配置することでこれを行います。
すなわち
元のパス: C:\Users\Previous
新しいパス: C:\Users\Previous\Previous
フォルダーとその内容を同じ名前のサブフォルダーに移動したい場合は、次のようにします。
private void button1_Click(object sender, EventArgs e)
{
CopyContentsToSubFolderWithSameName(@"C:\Users\Previous");
}
private void CopyContentsToSubFolderWithSameName(string path)
{
DirectoryInfo currDir = new DirectoryInfo(path);
DirectoryInfo subDir =
Directory.CreateDirectory(Path.Combine(currDir.FullName, currDir.Name));
IEnumerable<DirectoryInfo> parentFolders =
subDir.Parent.EnumerateDirectories();
// Copy files in the current directory to the destination directory
foreach (FileInfo file in currDir.GetFiles())
{
file.MoveTo(Path.Combine(subDir.FullName, file.Name));
}
// Copy directories (including files) in the current directory
// to the destination directory
foreach (DirectoryInfo dir in parentFolders)
{
if (dir.Name != subDir.Name)
{
dir.MoveTo(Path.Combine(subDir.FullName, dir.Name));
}
}
}