Если папка не существует, создайте ее

543

Я использую элемент управления FileUploader в своем приложении. Я хочу сохранить файл в указанной папке. Теперь я хочу, если эта папка не существует, сначала ее создать, а затем сохранить файл в этой папке. Если папка уже существует, просто сохраните файл в ней.

Как я могу это сделать?

  • 0
    @JoeBlow - Ха - должен был указать, какой ответ является неправильным - теперь страница еще более запутана. (Он изменил принятый ответ? Или нет? OMG!) ;-)
  • 0
    Я попал сюда в поисках других вещей, но удивительно, как много людей борются, чтобы противоречить друг другу с их собственной версией той же истории. Microsoft является автором .NET Framework и MSDN. То, соблюдается ли правильное поведение другими исполнителями, такими как Mono, не имеет значения для правильности поведения, описанного в MSDN. О, и Моно делает правильные вещи, так где же аргумент?
Показать ещё 1 комментарий
Теги:

16 ответов

1005
Лучший ответ

Как уже говорили другие, используйте System.IO.Directory.CreateDirectory

Но вам не нужно проверять, существует ли он первым. Из документов

Любые и все каталоги, указанные в path, создаются, если они не существуют или если какая-то часть пути недопустима. Если каталог уже существует, этот метод не создает новый каталог, но возвращает объект DirectoryInfo для существующего каталога.

  • 179
    +1 за указание на то, что проверка не нужна
Показать ещё 6 комментариев
347

Используйте приведенный ниже код в соответствии с http://forums.asp.net/p/1226236/2209871.aspx:

string subPath ="ImagesPath"; // your code goes here

bool exists = System.IO.Directory.Exists(Server.MapPath(subPath));

if(!exists)
    System.IO.Directory.CreateDirectory(Server.MapPath(subPath));
  • 0
    Извините, я пропустил добавление ссылки.
  • 0
    totaldotnet.com/Tip/ShowTip22_UsePhysicalAppPath.aspx Server.MapPath против PhysicalApplicationPath. Ты согласен?
Показать ещё 9 комментариев
199

Просто напишите эту строку:

System.IO.Directory.CreateDirectory(myDir);
  • Если папка еще не существует, она будет создана.
  • Если папка уже существует, строка будет игнорироваться.

Ссылка: Статья о Directory.CreateDirectory на MSDN

27

Directory.Exists Это объяснит, как проверить, существует ли FilePath

Directory.CreateDirectory Это объяснит, как попробовать и создать FilePath, если он не существует

  • 0
    @Tavousi это функции, предоставляемые jeroenh, было бы хорошим началом;)
  • 0
    Ссылка не работает ..
Показать ещё 2 комментария
27

Вы можете создать путь, если он еще не существует, с помощью следующего метода:

using System.IO;

private void CreateIfMissing(string path)
{
  bool folderExists = Directory.Exists(Server.MapPath(path));
  if (!folderExists)
    Directory.CreateDirectory(Server.MapPath(path));
}
  • 3
    Убедитесь, if (!folderExists) не нужен.
  • 7
    @bazzilic да, но это показывает намерение. Мне не нужно догадываться (или точно знать), как API справляется с этим. Любой, кто читает этот код, будет точно знать, что произойдет.
Показать ещё 2 комментария
16
using System.IO

if (!Directory.Exists(yourDirectory))
    Directory.CreateDirectory(yourDirectory);
16

Вы можете использовать предложение try/catch и проверить, существует ли он:

  try
  {
    if (!Directory.Exists(path))
    {
       // Try to create the directory.
       DirectoryInfo di = Directory.CreateDirectory(path);
    }
  }
  catch (IOException ioex)
  {
     Console.WriteLine(ioex.Message);
  }
  • 8
    Это хороший ответ, но, согласно документации MSDN, «создаются все каталоги, указанные в пути, если они не существуют или если какая-то часть пути недопустима. Параметр пути указывает путь к каталогу, а не путь к файлу». . Если каталог уже существует, этот метод ничего не делает. " Таким образом, вам не нужен вызов Directory.Exists (путь).
  • 1
    Это правда, но это также предположение, поэтому всегда лучше проверять, чем предполагать, независимо от того, что говорится в MSDN.
Показать ещё 4 комментария
13

Этот метод будет создавать папку, если она не существует, и ничего не делать, если существует

Directory.CreateDirectory(path);
12
if (!Directory.Exists(Path.GetDirectoryName(fileName)))
{
    Directory.CreateDirectory(Path.GetDirectoryName(fileName));
}
  • 2
    CreateDirectory уже обрабатывает проверку, если каталог не существует.
5

Следующий код - лучшая строка (и) кода, который я использую, который создаст каталог, если его нет.

System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/temp/"));

Если каталог уже существует, этот метод не создает новый каталог, но возвращает объект DirectoryInfo для существующего каталога. >

  • 0
    CreateDirectory уже обрабатывает проверку, если каталог не существует.
  • 0
    @bergmeister, спасибо. Я только что пересек, проверил. Он действительно убрал условную проверку. Обновлен !!
2

Это был ответ, который я искал, но не смог найти:

        string pathToNewFolder = System.IO.Path.Combine(parentFolderPath, "NewSubFolder");
        DirectoryInfo directory = Directory.CreateDirectory(pathToNewFolder); 
       // Will create if does not already exist (otherwise will ignore)
  • указан путь к новой папке
  • переменная каталога, так что вы можете продолжать манипулировать ею по своему усмотрению.
1

Используйте код ниже. Я использовал этот код для копирования файлов и создания новой папки.

string fileToCopy = "filelocation\\file_name.txt";
String server = Environment.UserName;
string newLocation = "C:\\Users\\" + server + "\\Pictures\\Tenders\\file_name.txt";
string folderLocation = "C:\\Users\\" + server + "\\Pictures\\Tenders\\";
bool exists = System.IO.Directory.Exists(folderLocation);

if (!exists)
{
   System.IO.Directory.CreateDirectory(folderLocation);
   if (System.IO.File.Exists(fileToCopy))
   {
     MessageBox.Show("file copied");
     System.IO.File.Copy(fileToCopy, newLocation, true);

   }
   else
   {
      MessageBox.Show("no such files");

   }
}
1

Вы можете использовать Directory.Exist, чтобы проверить, существует ли каталог или нет.

0

string createfolder = "E:/tmp/" + uId;
System.IO.Directory.CreateDirectory(CreateFolder);

-1
string root = @"C:\Temp";

string subdir = @"C:\Temp\Mahesh";

// If directory does not exist, create it.

if (!Directory.Exists(root))
{

Directory.CreateDirectory(root);

}

CreateDirectory также используется для создания подкаталога. Все, что вам нужно сделать, это указать путь к каталогу, в котором будет создан этот подкаталог. Следующий фрагмент кода создает подкаталог Mahesh в C:\Temp directory.

// Create sub directory

if (!Directory.Exists(subdir))
{

Directory.CreateDirectory(subdir);

}
-3

Выведенный/комбинированный из нескольких ответов, реализация которого для меня была такой же простой, как это:

public void Init()
{
    String platypusDir = @"C:\platypus";
    CreateDirectoryIfDoesNotExist(platypusDir);
}

private void CreateDirectoryIfDoesNotExist(string dirName)
{
    System.IO.Directory.CreateDirectory(dirName);
}
  • 2
    Какой смысл инкапсулировать метод в то, что по сути является точной копией с немного другим именем? Вы буквально ничего не получаете от этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню