126 votes

Vérifier si un dossier existe dans un répertoire et le créer en utilisant C#

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#.

256voto

cycaHuH Points 888

Cela devrait aider :

using System.IO;
...

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

184voto

Heinzi Points 66519
using System.IO;
...

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

Répertoire.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 procéder à une vérification explicite au préalable.

Tous les répertoires spécifiés dans le chemin sont créés, sauf s'ils existent déjà ou si une partie du chemin est 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 si C:\a n'existe pas encore).


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

13 votes

Cette question a été soulevée sur plusieurs autres fils de discussion. Même si vous n'avez pas besoin de vérifier, cela rend l'intention du code plus claire, ce qui augmente la lisibilité pour une personne extérieure. Donc, garder la vérification pourrait être une bonne chose.

9 votes

@MattJ. : Dans ce cas, je préfère ajouter un court commentaire plutôt qu'un appel de fonction inutile. Je suis d'accord que ce comportement n'est pas évident, mais, d'un autre côté, le nommer (de manière plus appropriée) EnsureDirectoryExists aurait rendu la méthode plus difficile à trouver.

5 votes

Un peu comme une note : Directory.CreateDirectory sera rejeté si le nom du dossier correspond à un nom de fichier existant.

12voto

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

6voto

kufi Points 1174

Cela devrait fonctionner

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

1voto

Azam Rahimjonov Points 88
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;
            }
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X