Kiểm tra xem một thư mục có tồn tại trong một thư mục hay không và tạo chúng bằng C #


100

Làm cách nào để kiểm tra xem thư C:/mục có chứa một thư mục được đặt tên MP_Uploadhay không và nếu nó không tồn tại, hãy tạo thư mục tự động?

Tôi đang sử dụng Visual Studio 2005 C #.

Câu trả lời:


209

Điều này sẽ giúp:

using System.IO;
...

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

4
sử dụng System.IO; cũng được yêu cầu ngay từ đầu
fnc 12

169
using System.IO;
...

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

Directory.CreateDirectory thực hiện chính xác những gì bạn muốn: Nó tạo thư mục nếu nó chưa tồn tại. Trước tiên không cần phải kiểm tra rõ ràng.

Bất kỳ và tất cả các thư mục được chỉ định trong đường dẫn đều được tạo, trừ khi chúng đã tồn tại hoặc trừ khi một số phần của đường dẫn không hợp lệ. Tham số đường dẫn chỉ định đường dẫn thư mục, không phải đường dẫn tệp. Nếu thư mục đã tồn tại, phương pháp này không làm gì cả.

(Điều này cũng có nghĩa là tất cả các thư mục dọc theo đường dẫn được tạo nếu cần: CreateDirectory(@"C:\a\b\c\d")đủ, ngay cả khi C:\achưa tồn tại.)


Tuy nhiên, hãy để tôi thêm một lời cảnh báo về lựa chọn thư mục của bạn: Việc tạo một thư mục ngay bên dưới thư mục gốc của phân vùng hệ thống C:\là điều khó hiểu. Cân nhắc cho phép người dùng chọn một thư mục hoặc tạo một thư mục trong %APPDATA%hoặc %LOCALAPPDATA%thay vào đó (sử dụng Environment.GetFolderPath cho điều đó). Trang MSDN của liệt kê Environment.SpecialFolder chứa danh sách các thư mục hệ điều hành đặc biệt và mục đích của chúng.


4
Chính tôi cũng không biết điều đó; Tôi cảm thây xâu hổ; Tôi đã làm nếu-không-tồn-tại-thì-tạo trong nhiều năm.

10
Điều này đã đưa ra trên một số chủ đề khác. Mặc dù bạn không cần phải kiểm tra, nhưng nó làm cho ý định của mã rõ ràng hơn, ngày càng dễ đọc đối với người ngoài. Vì vậy, giữ séc có thể là một điều tốt.
Matt J.

6
@MattJ: Trong trường hợp đó, tôi thà thêm một bình luận ngắn gọn hơn là một lệnh gọi hàm vô ích. Tôi đồng ý rằng hành vi này không rõ ràng, nhưng mặt khác, việc đặt tên nó (khéo léo hơn) EnsureDirectoryExistssẽ làm cho phương thức khó tìm hơn.
Heinzi

3
Một số lưu ý: Directory.CreateDirectorysẽ ném nếu tên thư mục khớp với tên tệp hiện có.
Reza M.

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

1
Vâng, tất nhiên, tôi đã đoán một chút. Ai đang cố gắng nhớ từng tên phương pháp nhỏ ... Và tôi đã lười khởi động VS ... Mục đích của việc này - đối với tôi - là giúp người hỏi bằng cách đưa ra ý tưởng; nếu họ mong đợi tất cả những điều nhỏ nhặt để được sao chép dán thân thiện, sau đó ... Họ phải suy nghĩ một chút, quá, phải ... Sửa chữa: thay đổi Createđể CreateDirectory:)

6

Điều này sẽ hoạt động

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

Bạn có thể thử cái này ..

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

đây là bản sao trực tiếp của câu trả lời được chấp nhận với định dạng xấu, điều này được cho là cải thiện SO như thế nào?
Tarick Welling
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.