Sprawdź, czy folder istnieje w katalogu i utwórz go za pomocą C #


100

Jak mogę sprawdzić, czy katalog C:/zawiera folder o nazwie MP_Upload, a jeśli nie istnieje, utworzyć ten folder automatycznie?

Używam Visual Studio 2005 C #.

Odpowiedzi:


210

To powinno pomóc:

using System.IO;
...

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

4
using System.IO; wymagane również na początku
fnc12

169
using System.IO;
...

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

Directory.CreateDirectory robi dokładnie to, co chcesz: tworzy katalog, jeśli jeszcze nie istnieje. Nie ma potrzeby wcześniejszego sprawdzania.

Wszystkie katalogi określone w path są tworzone, chyba że już istnieją lub część ścieżki jest nieprawidłowa. Parametr path określa ścieżkę do katalogu, a nie ścieżkę do pliku. Jeśli katalog już istnieje, ta metoda nic nie robi.

(Oznacza to również, że wszystkie katalogi na ścieżce są tworzone w razie potrzeby: CreateDirectory(@"C:\a\b\c\d")wystarczy, nawet jeśli jeszcze C:\anie istnieją).


Pozwólcie, że dodam jednak słowo przestrogi dotyczące wyboru katalogu: utworzenie folderu bezpośrednio poniżej katalogu głównego partycji systemowej nie C:\jest mile widziane. Rozważ pozwolenie użytkownikowi na wybranie folderu lub utworzenie folderu w programie %APPDATA%lub %LOCALAPPDATA%zamiast tego (użyj do tego celu Environment.GetFolderPath ). Strona MSDN wyliczenia Environment.SpecialFolder zawiera listę specjalnych folderów systemu operacyjnego i ich celów.


4
Sam tego nie wiedziałem; Czuję się zawstydzony; Od lat zajmuję się tworzeniem „jeśli nie istnieje”.

10
Pojawiło się to w kilku innych wątkach. Nawet jeśli nie musisz sprawdzać, sprawia to, że intencja kodu jest bardziej przejrzysta i staje się bardziej czytelna dla osoby postronnej. Więc trzymanie czeku może być dobrą rzeczą.
Matt J.

6
@MattJ .: W takim przypadku wolałbym dodać krótki komentarz niż bezużyteczne wywołanie funkcji. Zgadzam się, że to zachowanie nie jest oczywiste, ale z drugiej strony nazwanie go (trafniej) EnsureDirectoryExistsutrudniłoby znalezienie metody.
Heinzi,

3
Nieco uwagi: Directory.CreateDirectoryzostanie wyrzucone, jeśli nazwa folderu pasuje do istniejącej nazwy pliku.
Reza M.

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

1
Tak, oczywiście, trochę się domyślałam. Kto próbuje zapamiętać każdą małą nazwę metody ... A ja byłem leniwy, uruchamiając VS ... Celem tego - dla mnie - jest pomoc osobie pytającej poprzez przekazywanie pomysłów; jeśli oczekują, że wszystkie te małe rzeczy będą przyjazne dla kopiowania i wklejania, to ... Muszą też trochę pomyśleć, dobrze ... Poprawione: zmieniono Createna CreateDirectory:)

6

To powinno działać

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

Możesz spróbować tego ...

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

to jest bezpośrednia kopia zaakceptowanej odpowiedzi ze złym formatowaniem, jak to ma poprawić SO?
Tarick Welling
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.