Verifique si existe una carpeta en un directorio y créela usando C #


100

¿Cómo puedo comprobar si el directorio C:/contiene una carpeta con nombre MP_Uploady, si no existe, crear la carpeta automáticamente?

Estoy usando Visual Studio 2005 C #.

Respuestas:


209

Esto debería ayudar:

using System.IO;
...

string path = @"C:\MP_Upload";
if(!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}

4
usando System.IO; también requerido al principio
fnc12

169
using System.IO;
...

Directory.CreateDirectory(@"C:\MP_Upload");

Directory.CreateDirectory hace exactamente lo que usted quiere: crea el directorio si aún no existe. No es necesario hacer una verificación explícita primero.

Se crean todos y cada uno de los directorios especificados en la ruta, a menos que ya existan o que alguna parte de la ruta no sea válida. El parámetro de ruta especifica una ruta de directorio, no una ruta de archivo. Si el directorio ya existe, este método no hace nada.

(Esto también significa que todos los directorios a lo largo de la ruta se crean si es necesario: es CreateDirectory(@"C:\a\b\c\d")suficiente, incluso si C:\aaún no existe).


Sin embargo, permítame agregar una advertencia sobre su elección de directorio: la creación de una carpeta directamente debajo de la raíz de la partición del sistema C:\está mal vista. Considere permitir que el usuario elija una carpeta o cree una carpeta en %APPDATA%o en su %LOCALAPPDATA%lugar (use Environment.GetFolderPath para eso). La página de MSDN de la enumeración Environment.SpecialFolder contiene una lista de carpetas especiales del sistema operativo y sus propósitos.


4
Yo mismo no lo sabía; Me siento avergonzado; He estado haciendo si-no-existe-luego-crear durante años.

10
Esto ha surgido en varios otros hilos. A pesar de que no necesita verificar, hace que la intención del código sea más clara, lo que aumenta la legibilidad para un extraño. Así que mantener el control podría ser algo bueno.
Matt J.

6
@MattJ .: En ese caso, prefiero agregar un comentario corto que una llamada de función inútil. Estoy de acuerdo en que este comportamiento no es obvio, pero, por otro lado, nombrarlo (más acertadamente) EnsureDirectoryExistshabría hecho que el método fuera más difícil de encontrar.
Heinzi

3
Algo de una nota: Directory.CreateDirectoryse lanzará si el nombre de la carpeta coincide con un nombre de archivo existente.
Reza M.

11
if(!System.IO.Directory.Exists(@"c:\mp_upload"))
{
     System.IO.Directory.CreateDirectory(@"c:\mp_upload");
}

1
Sí, por supuesto, estaba adivinando un poco. Quién está tratando de recordar cada nombre de método pequeño ... Y me dio pereza encender VS ... El objetivo de esto, para mí, es ayudar a la persona que pregunta dándole ideas; si esperan que todas estas pequeñas cosas sean fáciles de copiar y pegar, entonces ... También tienen que pensar un poco, ¿verdad ... Corregido: cambiado Createa CreateDirectory:)

6

Esto debería funcionar

if(!Directory.Exists(@"C:\MP_Upload")) {
    Directory.CreateDirectory(@"C:\MP_Upload");
}

1
using System;
using System.IO;
using System.Windows.Forms;

namespace DirCombination 
{
    public partial class DirCombination : Form
    {
        private const string _Path = @"D:/folder1/foler2/folfer3/folder4/file.txt";
        private string _finalPath = null;
        private string _error = null;

        public DirCombination()
        {
            InitializeComponent();

            if (!FSParse(_Path))
                Console.WriteLine(_error);
            else
                Console.WriteLine(_finalPath);
        }

        private bool FSParse(string path)
        {
            try
            {
                string[] Splited = path.Replace(@"//", @"/").Replace(@"\\", @"/").Replace(@"\", "/").Split(':');
                string NewPath = Splited[0] + ":";
                if (Directory.Exists(NewPath))
                {                    
                    string[] Paths = Splited[1].Substring(1).Split('/');

                    for (int i = 0; i < Paths.Length - 1; i++)
                    {
                        NewPath += "/";
                        if (!string.IsNullOrEmpty(Paths[i]))
                        {
                            NewPath += Paths[i];
                            if (!Directory.Exists(NewPath))
                                Directory.CreateDirectory(NewPath);
                        }
                    }

                    if (!string.IsNullOrEmpty(Paths[Paths.Length - 1]))
                    {
                        NewPath += "/" + Paths[Paths.Length - 1];
                        if (!File.Exists(NewPath))
                            File.Create(NewPath);
                    }
                    _finalPath = NewPath;
                    return true;
                }
                else
                {
                    _error = "Drive is not exists!";
                    return false;
                }
            }
            catch (Exception ex)
            {
                _error = ex.Message;
                return false;
            }
        }
    }
}

1
    String path = Server.MapPath("~/MP_Upload/");
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }

0

Puedes probar esto ...

using System.IO;string path = "C:\MP_Upload";if(!Directory.Exists(path)){
   Directory.CreateDirectory(path);}

esta es una copia directa de la respuesta aceptada con un formato incorrecto, ¿cómo se supone que esto mejorará el SO?
Tarick Welling
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.