ตรวจสอบว่ามีโฟลเดอร์อยู่ในไดเร็กทอรีหรือไม่และสร้างโดยใช้ C #


102

ฉันจะตรวจสอบได้อย่างไรว่าไดเร็กทอรีC:/มีชื่อโฟลเดอร์MP_Uploadและหากไม่มีอยู่ให้สร้างโฟลเดอร์โดยอัตโนมัติ

ฉันใช้ Visual Studio 2005 C #

คำตอบ:


210

สิ่งนี้จะช่วยได้:

using System.IO;
...

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

4
ใช้ System.IO; ยังจำเป็นในการเริ่มต้น
fnc12

170
using System.IO;
...

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

Directory.CreateDirectoryทำสิ่งที่คุณต้องการ: สร้างไดเร็กทอรีหากยังไม่มี ไม่จำเป็นต้องทำการตรวจสอบอย่างชัดเจนก่อน

ไดเร็กทอรีใด ๆ และทั้งหมดที่ระบุในพา ธ จะถูกสร้างขึ้นเว้นแต่ว่ามีอยู่แล้วหรือบางส่วนของพา ธ ไม่ถูกต้อง พารามิเตอร์พา ธ ระบุพา ธ ไดเร็กทอรีไม่ใช่พา ธ ไฟล์ หากมีไดเร็กทอรีอยู่แล้ววิธีนี้จะไม่ทำอะไรเลย

(ซึ่งหมายความว่าไดเรกทอรีทั้งหมดตามเส้นทางจะถูกสร้างขึ้นหากจำเป็น: CreateDirectory(@"C:\a\b\c\d")พอเพียงแม้ว่าC:\aจะยังไม่มีอยู่ก็ตาม)


ให้ฉันเพิ่มคำเตือนเกี่ยวกับไดเร็กทอรีที่คุณเลือก: การสร้างโฟลเดอร์โดยตรงด้านล่างรูทพาร์ติชันระบบC:\นั้นขมวดคิ้ว พิจารณาให้ผู้ใช้เลือกโฟลเดอร์หรือสร้างโฟลเดอร์ใน%APPDATA%หรือ%LOCALAPPDATA%แทน (ใช้Environment.GetFolderPathสำหรับสิ่งนั้น) หน้า MSDN ของการแจงนับEnvironment.SpecialFolderประกอบด้วยรายการของโฟลเดอร์ระบบปฏิบัติการพิเศษและวัตถุประสงค์


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 ... ประเด็นนี้ - สำหรับฉัน - คือการช่วยคนที่ถามโดยให้ความคิด หากพวกเขาคาดหวังว่าสิ่งเล็กน้อยเหล่านี้จะเป็นมิตรกับการคัดลอกวางแล้วล่ะก็ ... พวกเขาก็ต้องคิดสักนิดใช่ไหม ... แก้ไข: เปลี่ยนCreateเป็นCreateDirectory:)


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 อย่างไร
Tarick Welling
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.