Controlla se esiste una cartella in una directory e creala usando C #


100

Come posso verificare se la directory C:/contiene una cartella denominata MP_Uploade, se non esiste, crearla automaticamente?

Sto usando Visual Studio 2005 C #.

Risposte:


210

Questo dovrebbe aiutare:

using System.IO;
...

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

4
using System.IO; richiesto anche all'inizio
fnc12

169
using System.IO;
...

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

Directory.CreateDirectory fa esattamente quello che vuoi: crea la directory se non esiste ancora. Non è necessario eseguire prima un controllo esplicito.

Vengono create tutte le directory specificate in path, a meno che non esistano già oa meno che una parte del percorso non sia valida. Il parametro path specifica un percorso di directory, non un percorso di file. Se la directory esiste già, questo metodo non fa nulla.

(Ciò significa anche che tutte le directory lungo il percorso vengono create se necessario: è CreateDirectory(@"C:\a\b\c\d")sufficiente, anche se C:\anon esiste ancora.)


Lasciatemi aggiungere una parola di cautela sulla scelta della directory, però: la creazione di una cartella direttamente sotto la radice della partizione di sistema C:\è disapprovata. Considera la possibilità di consentire all'utente di scegliere una cartella o di creare una cartella in %APPDATA%o %LOCALAPPDATA%invece (usa Environment.GetFolderPath per quello). La pagina MSDN dell'enumerazione Environment.SpecialFolder contiene un elenco di cartelle del sistema operativo speciali e dei relativi scopi.


4
Non lo sapevo nemmeno io; Mi vergogno; Faccio se-non-esiste-allora-crea da anni.

10
Questo è emerso in molti altri thread. Anche se non è necessario controllare, rende l'intento del codice più chiaro, sempre più leggibile per un estraneo. Quindi mantenere il controllo potrebbe essere una buona cosa.
Matt J.

6
@ MattJ .: In tal caso, preferirei aggiungere un breve commento piuttosto che un'inutile chiamata di funzione. Sono d'accordo che questo comportamento non sia ovvio, ma, d'altra parte, nominarlo (più appropriatamente) EnsureDirectoryExistsavrebbe reso il metodo più difficile da trovare.
Heinzi

3
Un po 'una nota: Directory.CreateDirectoryverrà lanciata se il nome della cartella corrisponde a un nome di file esistente.
Reza M.

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

1
Sì, certo, stavo indovinando un po '. Chi sta cercando di ricordare ogni piccolo nome di metodo ... Ed ero pigro a lanciare VS ... Il punto di questo - per me - è aiutare la persona che chiede dando idee; se si aspettano che tutte queste piccole cose siano compatibili con il copia-incolla, allora ... Devono anche pensarci un po ', giusto ... Corretto: modificato Createin CreateDirectory:)

6

Questo dovrebbe funzionare

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

Puoi provare questo ..

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

questa è una copia diretta della risposta accettata con una formattazione errata, come dovrebbe migliorare SO?
Tarick Welling,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.