Überprüfen Sie, ob ein Ordner in einem Verzeichnis vorhanden ist, und erstellen Sie ihn mit C #

100

Wie kann ich überprüfen, ob das Verzeichnis C:/einen Ordner mit dem Namen enthält MP_Upload, und den Ordner automatisch erstellen, wenn er nicht vorhanden ist?

Ich verwende Visual Studio 2005 C #.

gymcode
quelle

Antworten:

209

Dies sollte helfen:

using System.IO;
...

string path = @"C:\MP_Upload";
if(!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}
cycaHuH
quelle
4
using System.IO; auch am
anfang
169
using System.IO;
...

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

Directory.CreateDirectory macht genau das, was Sie wollen: Es erstellt das Verzeichnis, wenn es noch nicht existiert. Es ist nicht erforderlich, zuerst eine explizite Überprüfung durchzuführen.

Alle im Pfad angegebenen Verzeichnisse werden erstellt, es sei denn, sie sind bereits vorhanden oder ein Teil des Pfads ist ungültig. Der Parameter path gibt einen Verzeichnispfad an, keinen Dateipfad. Wenn das Verzeichnis bereits vorhanden ist, führt diese Methode nichts aus.

(Dies bedeutet auch, dass alle Verzeichnisse entlang des Pfads bei Bedarf erstellt werden. Dies CreateDirectory(@"C:\a\b\c\d")reicht aus, auch wenn es C:\anoch nicht vorhanden ist.)


Lassen Sie mich jedoch ein Wort zur Vorsicht bei der Auswahl Ihres Verzeichnisses hinzufügen: Das Erstellen eines Ordners direkt unter dem Stamm der Systempartition C:\ist verpönt. Lassen Sie den Benutzer einen Ordner auswählen %APPDATA%oder %LOCALAPPDATA%stattdessen einen Ordner erstellen (verwenden Sie dazu Environment.GetFolderPath ). Die MSDN-Seite der Environment.SpecialFolder- Enumeration enthält eine Liste spezieller Betriebssystemordner und deren Zwecke.

Heinzi
quelle
4
Das wusste ich selbst nicht; Ich schäme mich; Ich mache seit Jahren, wenn-nicht-existiert-dann-erschaffe.
10
Dies ist bei mehreren anderen Themen aufgetaucht. Auch wenn Sie dies nicht überprüfen müssen, wird die Absicht des Codes klarer und die Lesbarkeit für einen Außenstehenden verbessert. Es könnte also eine gute Sache sein, den Scheck zu behalten.
Matt J.
6
@MattJ.: In diesem Fall möchte ich lieber einen kurzen Kommentar als einen nutzlosen Funktionsaufruf hinzufügen. Ich stimme zu, dass dieses Verhalten nicht offensichtlich ist, aber andererseits EnsureDirectoryExistshätte eine (treffendere) Benennung die Methode schwieriger zu finden gemacht.
Heinzi
3
Eine Art Hinweis: Directory.CreateDirectoryWird ausgelöst, wenn der Ordnername mit einem vorhandenen Dateinamen übereinstimmt.
Reza M.
11
if(!System.IO.Directory.Exists(@"c:\mp_upload"))
{
     System.IO.Directory.CreateDirectory(@"c:\mp_upload");
}

quelle
1
Ja, natürlich habe ich ein wenig geraten. Wer versucht, sich an jeden kleinen Methodennamen zu erinnern? Und ich war faul, VS zu starten. Für mich geht es darum, der fragenden Person zu helfen, indem ich Ideen gebe. Wenn sie erwarten, dass all diese kleinen Dinge Copy-Paste-freundlich sind, dann ... müssen sie auch ein wenig nachdenken, richtig ... Korrigiert: geändert Createin CreateDirectory:)
6

Das sollte funktionieren

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

Sie können dies versuchen ..

using System.IO;string path = "C:\MP_Upload";if(!Directory.Exists(path)){
   Directory.CreateDirectory(path);}
Ashish
quelle
Dies ist eine direkte Kopie der akzeptierten Antwort mit schlechter Formatierung. Wie soll dies SO verbessern?
Tarick Welling