Verifique se existe uma pasta em um diretório e crie-a usando C #


100

Como posso verificar se o diretório C:/contém uma pasta chamada MP_Uploade, se ela não existir, criar a pasta automaticamente?

Estou usando o Visual Studio 2005 C #.

Respostas:


209

Isso deve ajudar:

using System.IO;
...

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

4
using System.IO; também obrigatório no início
fnc12

169
using System.IO;
...

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

Directory.CreateDirectory faz exatamente o que você deseja: cria o diretório se ainda não existir. Não há necessidade de fazer uma verificação explícita primeiro.

Todos e quaisquer diretórios especificados no caminho são criados, a menos que já existam ou alguma parte do caminho seja inválida. O parâmetro path especifica um caminho de diretório, não um caminho de arquivo. Se o diretório já existir, esse método não fará nada.

(Isso também significa que todos os diretórios ao longo do caminho são criados, se necessário: CreateDirectory(@"C:\a\b\c\d")basta, mesmo se C:\aainda não existir.)


Deixe-me acrescentar uma palavra de cautela sobre a sua escolha de diretório: Criar uma pasta diretamente abaixo da raiz da partição do sistema C:\é algo desaprovado. Considere deixar o usuário escolher uma pasta ou criar uma pasta em %APPDATA%ou em %LOCALAPPDATA%vez disso (use Environment.GetFolderPath para isso). A página MSDN da enumeração Environment.SpecialFolder contém uma lista de pastas especiais do sistema operacional e suas finalidades.


4
Eu não sabia disso; Eu me sinto envergonhado; Há anos faço se-não-existe-então-crie.

10
Isso surgiu em vários outros tópicos. Mesmo que você não precise verificar, isso torna a intenção do código mais clara, cada vez mais legível para quem está de fora. Portanto, manter o cheque pode ser uma coisa boa.
Matt J.

6
@MattJ .: Nesse caso, prefiro adicionar um breve comentário do que uma chamada de função inútil. Concordo que esse comportamento não é óbvio, mas, por outro lado, nomeá-lo (mais apropriadamente) EnsureDirectoryExiststornaria o método mais difícil de encontrar.
Heinzi,

3
Uma nota: Directory.CreateDirectorylançará se o nome da pasta corresponder a um nome de arquivo existente.
Reza M.

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

1
Sim, claro, eu estava adivinhando um pouco. Quem está tentando se lembrar de cada pequeno nome de método ... E eu tive preguiça de disparar VS ... O objetivo disso - para mim - é ajudar a pessoa que pede dando ideias; se eles esperam que todas essas pequenas coisas sejam fáceis de copiar e colar, então ... Eles têm que pensar um pouco também, certo ... Corrigido: alterado Createpara CreateDirectory:)

6

Isso deve funcionar

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

Você pode tentar isso ..

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

esta é uma cópia direta da resposta aceita com formatação incorreta, como isso pode melhorar o SO?
Tarick Welling de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.