디렉터리에 폴더가 있는지 확인하고 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 는 원하는대로 정확히 수행합니다. 아직 존재하지 않는 경우 디렉터리를 만듭니다. 먼저 명시적인 확인을 할 필요가 없습니다.

이미 존재하거나 경로의 일부가 유효하지 않은 경우가 아니면 경로에 지정된 모든 디렉토리가 작성됩니다. path 매개 변수는 파일 경로가 아닌 디렉토리 경로를 지정합니다. 디렉토리가 이미있는 경우이 메서드는 아무 작업도 수행하지 않습니다.

(이것은 또한 필요한 경우 경로를 따라 모든 디렉토리 가 생성됨을 의미합니다 . 아직 존재하지 CreateDirectory(@"C:\a\b\c\d")않더라도 충분 C:\a합니다.)


하지만 디렉토리 선택에 대해주의 할 점을 추가하겠습니다. 시스템 파티션 루트 바로 아래에 폴더를 만드는 C:\것은 눈살을 찌푸립니다. 사용자가 폴더를 선택 %APPDATA%하거나 또는 %LOCALAPPDATA%대신 폴더를 생성하도록하십시오 (이 경우 Environment.GetFolderPath 사용 ). Environment.SpecialFolder 열거 형 의 MSDN 페이지 에는 특수 운영 체제 폴더 및 용도 목록이 포함되어 있습니다.


4
나는 나 자신을 몰랐다. 나는 부끄럽다. 나는 수년 동안 존재하지 않는다면 창조 해왔다.

10
이것은 여러 다른 스레드에서 발생했습니다. 확인할 필요는 없지만 코드의 의도를 더 명확하게 만들어 외부인이 가독성을 높일 수 있습니다. 따라서 수표를 유지하는 것은 좋은 일이 될 수 있습니다.
Matt J.

6
@MattJ .:이 경우 쓸모없는 함수 호출보다 짧은 주석을 추가하고 싶습니다. 나는이 동작이 분명하지 않다는 데 동의하지만, 다른 한편으로 (더 적절하게) 이름을 지정 EnsureDirectoryExists하면 방법을 찾기가 더 어려워 졌을 것입니다.
Heinzi

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

이것은 잘못된 형식으로 받아 들여지는 대답의 직접 사본입니다. 어떻게 개선해야합니까?
Tarick Welling 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.