检查目录中是否存在文件夹,并使用C#创建它们


100

如何检查目录是否C:/包含名为的文件夹MP_Upload,如果该文件夹不存在,则自动创建该文件夹?

我正在使用Visual Studio 2005 C#。

Answers:


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完全满足您的要求:如果目录不存在,它将创建目录。无需先进行显式检查。

除非在路径中指定的目录已经存在或者路径的某些部分无效,否则将创建该目录中指定的所有目录。path参数指定目录路径,而不是文件路径。如果目录已经存在,则此方法不执行任何操作。

(这也意味着,如果需要,将创建路径中的所有目录:CreateDirectory(@"C:\a\b\c\d")足够,即使C:\a尚不存在。)


但是,让我对您选择的目录添加一些警告:不赞成在系统分区根目录下直接创建一个文件夹C:\。考虑让用户选择一个文件夹或创建文件夹%APPDATA%%LOCALAPPDATA%代替(使用Environment.GetFolderPath为该)。Environment.SpecialFolder枚举的MSDN页面包含特殊操作系统文件夹及其用途的列表。


4
我自己不知道;我感到惭愧; 我一直在尝试如果不存在然后创建。

10
这已经在其他几个线程上提出了。即使您不需要检查,它也使代码的意图更加清晰,使局外人可读性更高。因此,保留支票可能是一件好事。
Matt J.13年

6
@MattJ .:在那种情况下,我宁愿添加简短的注释,而不是无用的函数调用。我同意这种行为并不明显,但另一方面,(更恰当地)对其进行命名EnsureDirectoryExists会使该方法更难找到。
Heinzi 2013年

3
有点说明:Directory.CreateDirectory如果文件夹名称与现有文件名匹配,则会抛出该错误。
Reza M.

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


0

你可以试试看

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

这是格式错误的已接受答案的直接副本,这应该如何改善SO?
塔里克·威灵
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.