Hacer un subdirectorio con una estructura de carpetas a partir de parte de una ruta
-
20-08-2019 - |
Pregunta
Si tengo una ruta, así:
c: \ windows \ system32 \ inetsrv \ abc.exe
Y quiero hacer una carpeta debajo de una unidad / ruta como
Z: \ Stuff \
¿Cómo puedo hacer un subdirectorio y seleccionar si quiero todo, desde Windows en adelante, system32 en adelante o inetsrv en adelante? Por cierto, sé que DirectoryInfo
tiene un método llamado CreateSubDirectory()
.
Gracias
Solución
Puede usar System.IO.Directory.CreateDirectory (ruta). Es un método estático, a diferencia de DirectoryInfo, donde necesita una instancia de un directorio para llamarlo.
Después de eso, puede usar Xcopy o Robocopy para copiar todos los archivos y subdirectorios.
Otros consejos
Si desea copiar todo de un directorio a otro, puede usar algo como esto:
using System;
using System.Collections.Generic;
using System.IO;
namespace so_cp__r
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter path from where you want to copy:");
List<DirectoryInfo> fromDirs = new List<DirectoryInfo>();
DirectoryInfo dir = new FileInfo(Console.ReadLine()).Directory;
while (dir != null)
{
fromDirs.Add(dir);
dir = dir.Parent;
}
for (int i = 0; i < fromDirs.Count; i++)
Console.WriteLine("{0}: {1}", i, fromDirs[i].FullName);
Console.WriteLine("From which of these dirs do you want to start?");
DirectoryInfo fromDir = fromDirs[int.Parse(Console.ReadLine())];
Console.WriteLine("Where do you want to copy?");
DirectoryInfo toDir = new DirectoryInfo(Console.ReadLine());
recursive_copy(fromDir, toDir);
}
static void recursive_copy(DirectoryInfo fromDir, DirectoryInfo toDir)
{
DirectoryInfo child = toDir.CreateSubdirectory(fromDir.Name);
foreach (FileInfo file in fromDir.GetFiles())
file.CopyTo(child.FullName + Path.DirectorySeparatorChar + file.Name);
foreach (DirectoryInfo dir in fromDir.GetDirectories())
recursive_copy(dir, child);
}
}
}