una saber ruta obtener manipular guardar existe especifica eliminar directorios directorio crear carpeta buscar archivos archivo c# .net file-access

saber - obtener archivos de un directorio c#



¿Cómo creo un archivo Y cualquier carpeta, si las carpetas no existen? (9)

. dado un camino, ¿cómo podemos recursivamente crear todas las carpetas necesarias para crear el archivo ... para ese camino

Crea todos los directorios y subdirectorios según lo especificado por la ruta.

Directory.CreateDirectory(path);

entonces puedes crear un archivo.

imagine que deseo crear (o sobrescribir) el siguiente archivo: - C:/Temp/Bar/Foo/Test.txt

Usando el File.Create(..) , esto puede hacerlo.

PERO, si no tengo ninguna de las siguientes carpetas (de esa ruta de ejemplo, arriba)

  • Temperatura
  • Bar
  • Foo

luego recibo una excepción DirectoryNotFoundException .

Entonces ... dado un camino, ¿cómo podemos crear recursivamente todas las carpetas necesarias para crear el archivo ... para ese camino? Si existen carpetas Temp o Bar, pero Foo no ... entonces eso también se crea.

Para simplificar, supongamos que no hay problemas de seguridad: todos los permisos están bien, etc.


Deberá verificar ambas partes de la ruta (directorio y nombre de archivo) y crear cada una si no existe.

Use File.Exists and Directory.Exists para averiguar si existen. Directory.CreateDirectory creará la ruta completa para usted, por lo que solo tendrá que llamar una vez si el directorio no existe, entonces simplemente cree el archivo.



Para resumir lo que se ha comentado en otras respuestas:

//path = @"C:/Temp/Bar/Foo/Test.txt"; Directory.CreateDirectory(Path.GetDirectoryName(path));

Directory.CreateDirectory creará los directorios recursivamente y si el directorio ya existe, regresará sin error.

Si resulta que hay un archivo Foo en C:/Temp/Bar/Foo , se lanzará una excepción.


Quiere Directory.CreateDirectory ()

Aquí hay una clase que uso (convertida a C #) que si le pasa un directorio de origen y un destino copiará todos los archivos y subcarpetas de ese directorio a su destino:

using System.IO; public class copyTemplateFiles { public static bool Copy(string Source, string destination) { try { string[] Files = null; if (destination[destination.Length - 1] != Path.DirectorySeparatorChar) { destination += Path.DirectorySeparatorChar; } if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } Files = Directory.GetFileSystemEntries(Source); foreach (string Element in Files) { // Sub directories if (Directory.Exists(Element)) { copyDirectory(Element, destination + Path.GetFileName(Element)); } else { // Files in directory File.Copy(Element, destination + Path.GetFileName(Element), true); } } } catch (Exception ex) { return false; } return true; } private static void copyDirectory(string Source, string destination) { string[] Files = null; if (destination[destination.Length - 1] != Path.DirectorySeparatorChar) { destination += Path.DirectorySeparatorChar; } if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } Files = Directory.GetFileSystemEntries(Source); foreach (string Element in Files) { // Sub directories if (Directory.Exists(Element)) { copyDirectory(Element, destination + Path.GetFileName(Element)); } else { // Files in directory File.Copy(Element, destination + Path.GetFileName(Element), true); } } }

}


Sé que hay algunas otras respuestas aquí, pero ninguna de ellas es lo suficientemente completa, el siguiente código creará directorios (si no existe) y luego copiará los archivos .

// using System.IO; // for ex. if you want to copy files from D:/A/ to D:/B/ foreach (var f in Directory.GetFiles(@"D:/A/", "*.*", SearchOption.AllDirectories)) { var fi = new FileInfo(f); var di = new DirectoryInfo(fi.DirectoryName); // you can filter files here if (fi.Name.Contains("FILTER") { if (!Directory.Exists(di.FullName.Replace("A", "B")) { Directory.CreateDirectory(di.FullName.Replace("A", "B")); File.Copy(fi.FullName, fi.FullName.Replace("A", "B")); } } }


Suponiendo que su ensamblado / FileIO tenga el permiso FileIO sí mismo, no está bien. Es posible que su aplicación no se ejecute con derechos de administrador. Es importante considerar Code Access Security y requesting FileIO Código de muestra:

FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C://test_r"); f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C://example//out.txt"); try { f2.Demand(); } catch (SecurityException s) { Console.WriteLine(s.Message); }

Comprender la seguridad de acceso de código .NET

¿El "Código de acceso de seguridad" de cualquier uso del mundo real?



// Determine whether the directory exists. if (Directory.Exists(path)) { Console.WriteLine("That path exists already."); return; } // Try to create the directory. DirectoryInfo di = Directory.CreateDirectory(path); Console.WriteLine("The directory was created successfully at {0}.", Directory.GetCreationTime(path));

Vea esta página de MSDN .

Espero que ayude!