Проверьте, существует ли папка в каталоге, и создайте их с помощью C #

100

Как я могу проверить, C:/содержит ли каталог указанную папку MP_Upload, и, если она не существует, создать папку автоматически?

Я использую Visual Studio 2005 C #.

гимнастический код
источник

Ответы:

210

Это должно помочь:

using System.IO;
...

string path = @"C:\MP_Upload";
if(!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}
cycaHuH
источник
4
используя System.IO; также требуется в начале
fnc12
170
using System.IO;
...

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

Directory.CreateDirectory делает именно то, что вы хотите: он создает каталог, если он еще не существует. Нет необходимости сначала выполнять явную проверку.

Создаются все каталоги, указанные в пути, если они еще не существуют или если некоторая часть пути неверна. Параметр path указывает путь к каталогу, а не к файлу. Если каталог уже существует, этот метод ничего не делает.

(Это также означает, что все каталоги на пути создаются при необходимости: CreateDirectory(@"C:\a\b\c\d")достаточно, даже если C:\aеще не существует.)


Однако позвольте мне сделать несколько предостережений относительно вашего выбора каталога: создание папки непосредственно под корнем системного раздела C:\не одобряется. Подумайте о том, чтобы позволить пользователю выбрать папку или создать папку в ней %APPDATA%или %LOCALAPPDATA%вместо нее (используйте для этого Environment.GetFolderPath ). Страница MSDN перечисления Environment.SpecialFolder содержит список специальных папок операционной системы и их назначение.

Heinzi
источник
4
Я сам этого не знал; Мне стыдно; Я много лет занимался «если не существует, то создавай».
10
Это возникло в нескольких других темах. Несмотря на то, что вам не нужно проверять, это делает намерение кода более ясным и более читабельным для постороннего. Так что сохранение чека может быть хорошим делом.
Мэтт Дж.
6
@MattJ .: В таком случае я бы предпочел добавить короткий комментарий, чем бесполезный вызов функции. Я согласен с тем, что такое поведение неочевидно, но, с другой стороны, его название (более подходящее) EnsureDirectoryExistsзатруднило бы поиск метода.
Heinzi
3
Небольшое примечание: Directory.CreateDirectoryвыдается, если имя папки совпадает с существующим именем файла.
Реза М.
11
if(!System.IO.Directory.Exists(@"c:\mp_upload"))
{
     System.IO.Directory.CreateDirectory(@"c:\mp_upload");
}

источник
1
Да, конечно, немного догадывалась. Кто пытается запомнить каждое маленькое название метода ... А мне было лень запускать VS ... Смысл этого - для меня - в том, чтобы помочь человеку, который спрашивает, предлагая идеи; если они ожидают, что все эти мелочи будут CreateCreateDirectory
6

Это должно работать

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

Вы можете попробовать это ..

using System.IO;string path = "C:\MP_Upload";if(!Directory.Exists(path)){
   Directory.CreateDirectory(path);}
Ашиш
источник
это прямая копия принятого ответа с плохим форматированием, как это должно улучшить SO?
Tarick Welling