Перевірте, чи існує папка в каталозі, і створіть їх за допомогою C #


100

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

Я використовую Visual Studio 2005 C #.

Відповіді:


209

Це має допомогти:

using System.IO;
...

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

4
за допомогою System.IO; також потрібно на початку
fnc12

169
using System.IO;
...

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

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

Будь-які та всі каталоги, вказані в шляху, створюються, якщо вони вже не існують або якщо частина частини шляху недійсна. Параметр шляху визначає шлях до каталогу, а не шлях до файлу. Якщо каталог вже існує, цей метод нічого не робить.

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


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


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
Так, звичайно, я трохи здогадувався. Хто намагається запам’ятати кожну маленьку назву методу… І мені було лінь підпалити ВС… Сенс цього - для мене - допомогти людині, яка просить, даючи ідеї; якщо вони очікують, що всі ці дрібниці будуть дружніми для копіювання, тоді ... Вони теж повинні трохи подумати, правильно ... Виправлено: змінено Createна CreateDirectory:)

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;
            }
        }
    }
}


0

Ви можете спробувати це ..

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

це пряма копія прийнятої відповіді з неправильним форматуванням, як це повинно покращити SO?
Терік Веллінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.