Vérifiez si un dossier existe dans un répertoire et créez-le en utilisant C #

100

Comment puis-je vérifier si le répertoire C:/contient un dossier nommé MP_Upload, et s'il n'existe pas, créer le dossier automatiquement?

J'utilise Visual Studio 2005 C #.

gymcode
la source

Réponses:

210

Cela devrait aider:

using System.IO;
...

string path = @"C:\MP_Upload";
if(!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}
cycaHuH
la source
4
en utilisant System.IO; également requis au début
fnc12
169
using System.IO;
...

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

Directory.CreateDirectory fait exactement ce que vous voulez: il crée le répertoire s'il n'existe pas encore. Il n'est pas nécessaire de faire d'abord une vérification explicite.

Tous les répertoires spécifiés dans path sont créés, sauf s'ils existent déjà ou à moins qu'une partie du chemin ne soit invalide. Le paramètre path spécifie un chemin de répertoire, pas un chemin de fichier. Si le répertoire existe déjà, cette méthode ne fait rien.

(Cela signifie également que tous les répertoires le long du chemin sont créés si nécessaire: CreateDirectory(@"C:\a\b\c\d")suffit, même s'il C:\an'existe pas encore.)


Permettez-moi d'ajouter un mot d'avertissement concernant votre choix de répertoire, cependant: La création d'un dossier directement sous la racine de la partition système C:\est mal vue. Envisagez de laisser l'utilisateur choisir un dossier ou de créer un dossier dans %APPDATA%ou à la %LOCALAPPDATA%place (utilisez Environment.GetFolderPath pour cela). La page MSDN de l' énumération Environment.SpecialFolder contient une liste de dossiers de système d'exploitation spéciaux et leurs objectifs.

Heinzi
la source
4
Je ne le savais pas moi-même; Je me sens honteux; Je fais si-pas-existe-puis-créer depuis des années.
10
Cela s'est produit sur plusieurs autres threads. Même si vous n'avez pas besoin de vérifier, cela rend l'intention du code plus claire, de plus en plus lisible pour un étranger. Alors garder le chèque pourrait être une bonne chose.
Matt J.
6
@MattJ .: Dans ce cas, je préfère ajouter un bref commentaire qu'un appel de fonction inutile. Je conviens que ce comportement n'est pas évident, mais, d'un autre côté, le nommer (plus justement) EnsureDirectoryExistsaurait rendu la méthode plus difficile à trouver.
Heinzi
3
Un peu d'une note: Directory.CreateDirectorylancera si le nom du dossier correspond à un nom de fichier existant.
Reza M.
11
if(!System.IO.Directory.Exists(@"c:\mp_upload"))
{
     System.IO.Directory.CreateDirectory(@"c:\mp_upload");
}

la source
1
Oui, bien sûr, je devinais un peu. Qui essaie de se souvenir de chaque petit nom de méthode ... Et j'ai été paresseux de lancer VS ... Le but de ceci - pour moi - est d'aider la personne qui demande en donnant des idées; s'ils s'attendent à ce que toutes ces petites choses soient faciles à copier-coller, alors ... Ils doivent réfléchir un peu, aussi, à droite ... Corrigé: changé Createen CreateDirectory:)
6

Cela devrait fonctionner

if(!Directory.Exists(@"C:\MP_Upload")) {
    Directory.CreateDirectory(@"C:\MP_Upload");
}
kufi
la source
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;
            }
        }
    }
}
Azam Rahimjonov
la source
1
    String path = Server.MapPath("~/MP_Upload/");
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
Ronaldo Albertini
la source
0

Vous pouvez essayer ceci.

using System.IO;string path = "C:\MP_Upload";if(!Directory.Exists(path)){
   Directory.CreateDirectory(path);}
Ashish
la source
ceci est une copie directe de la réponse acceptée avec un mauvais formatage, comment est-ce censé améliorer le SO?
Tarick Welling