যদি কোনও ফোল্ডার না থাকে তবে এটি তৈরি করুন


720

আমি আমার অ্যাপ্লিকেশনটিতে একটি ফাইলআপলোডার নিয়ন্ত্রণ ব্যবহার করি। আমি একটি নির্দিষ্ট ফোল্ডারে একটি ফাইল সংরক্ষণ করতে চাই। এখন আমি চাই, যদি এই ফোল্ডারটি না থাকে তবে প্রথমে এটি তৈরি করুন এবং তারপরে আমার ফাইলটি এই ফোল্ডারে সংরক্ষণ করুন। যদি ফোল্ডারটি ইতিমধ্যে বিদ্যমান থাকে তবে কেবলমাত্র এতে ফাইলটি সংরক্ষণ করুন।

আমি কীভাবে এটি করতে পারি?


@ জোবলো - হা - এর কোন উত্তরটি ভুল তা উল্লেখ করা উচিত - এখন পৃষ্ঠাটি আরও বিভ্রান্তিকর। (তিনি কি স্বীকৃত উত্তর পরিবর্তন করেছেন? বা তিনি করেননি? ওএমজি!) ;-)
বার্তোসজ

আমি অন্যান্য জিনিসগুলি সন্ধান করার জন্য এখানেই শেষ হয়েছি, তবে এটি আশ্চর্যজনক যে কত লোক একই গল্পের নিজস্ব সংস্করণ দিয়ে একে অপরের বিরোধিতা করার জন্য লড়াই করছে। মাইক্রোসফ্ট .NET ফ্রেমওয়ার্ক এবং এমএসডিএন রচনা করেছিল। অন্য বাস্তবায়নকারীদের যেমন মনোর দ্বারা সঠিক আচরণকে সম্মান করা হচ্ছে কিনা তা এমএসডিএন-তে বর্ণিত আচরণের যথার্থতার সাথে অপ্রাসঙ্গিক। ওহ, এবং মনোও সঠিক জিনিসটিও করে, তাই যুক্তিটি কোথায়?
monkey0506

উত্তর:


1238

অন্যরা যেমন বলেছে, ব্যবহার করুন System.IO.Directory.CreateDirectory

তবে, আপনার এটি আগে উপস্থিত আছে কিনা তা খতিয়ে দেখার দরকার নেই। ডক্স থেকে

পথে সুনির্দিষ্ট যে কোনও এবং সমস্ত ডিরেক্টরি তৈরি করা হয়, যদি না সেগুলি ইতিমধ্যে উপস্থিত থাকে বা পাথের কিছু অংশ অবৈধ না হয়। ডিরেক্টরি যদি ইতিমধ্যে বিদ্যমান থাকে তবে এই পদ্ধতিটি কোনও নতুন ডিরেক্টরি তৈরি করে না, তবে এটি বিদ্যমান ডিরেক্টরিটির জন্য একটি DirectoryInfo অবজেক্ট প্রদান করে।



25
এবং তবুও মাইক্রোসফ্ট কোড উদাহরণটি ডিরেক্টরিটির উপস্থিতি আছে কিনা তা
খতিয়ে দেখে নিজেকে দ্বিধাদ্বন্দ্ব করে

1
সুতরাং আমাদের এটি পরীক্ষা আছে কিনা তা বিদ্যমান আছে কি নেই? যদি আমরা আবার পরীক্ষা করে নিই এবং আবার ক্রিয়েট ডিরেক্টরী পদ্ধতি চেকটিও করি, আমরা চেকটি দুইবার করি ... এবং
আফাইক

3
@ মুফ্লিক্স এটি পছন্দ করুন - উদাহরণস্বরূপ একটি ডিরেক্টরিতে একটি ফাইল তৈরি করুন "FILENAME" কিন্তু কোনও এক্সটেনশন দেবেন না। তারপরে ডিরেক্টরিকে কল করার চেষ্টা করুন xএক্সজিস্টগুলি ("FILENAME") মিথ্যা ফিরিয়ে দেবে, যেমনটি হওয়া উচিত কারণ এরকম কোনও ডিরেক্টরি নেই। এখন আপনি যদি ক্রিয়েট ডিরেক্টরী ("FILENAME") কল করেন তবে এটি খারাপভাবে ব্যর্থ হবে কারণ এটি ইতিমধ্যে সেখানে "কিছু" রয়েছে। আশা করি তা বোধগম্য হয়।
ওটিভিও ডাসিও

1
ভুল! ফোল্ডারটি বিদ্যমান কিনা তা আমি আপনাকে পরীক্ষা করে দেখতে হবে। আমি কেবল সনাক্ত করেছি যে এই পদ্ধতিতে একটি গুরুতর সমস্যা রয়েছে। আপনি যদি ফোল্ডারের অস্তিত্বের জন্য যাচাই করেন না, ফোল্ডার হ্যান্ডেলটি যদি আপনি এটি নির্দিষ্টভাবে প্রকাশ না করেন তবে লিক হবে। আমরা এই অ্যাপ্লিকেশনটিতে এই উদাহরণটি ব্যবহার করেছি যা কয়েক মিলিয়ন ফোল্ডার প্রসেস করে। প্রতিবার এই পদ্ধতিটি ডাকা হওয়ার পরে, অ্যাপ্লিকেশনটি ফাইল হ্যান্ডেলটিকে ডিরেক্টরিতে ধরে রেখেছে। বেশ কয়েক ঘন্টা পরে, কর্পোরেট নেটওয়ার্ক এনএএস এর ফোল্ডারে কয়েক মিলিয়ন ফাইল হ্যান্ডলগুলি খোলা ছিল। চেক
ফ্রি'র

356

Http://forums.asp.net/p/1226236/2209871.aspx অনুযায়ী নীচের কোডটি ব্যবহার করুন :

string subPath ="ImagesPath"; // your code goes here

bool exists = System.IO.Directory.Exists(Server.MapPath(subPath));

if(!exists)
    System.IO.Directory.CreateDirectory(Server.MapPath(subPath));

41
কেন নয়: যদি (! ডিরেক্টরি। এক্সিজিস্ট (পথ_ টু_চেক)) ডিরেক্টরি।
দয়ান

158
ফোল্ডারটি বিদ্যমান কিনা তা খতিয়ে দেখার দরকার নেই। ম্যানুয়ালটি মনোযোগ সহকারে পড়ুন।
বাজিলিক

30
চেক করা এবং তৈরি করা পারমাণবিক নয়। উপরের কোডটির গন্ধ আছে, একটি রেসের শর্ত রয়েছে। আপনার আরও ভাল নিঃশর্তভাবে ডিরেক্টরি তৈরি করা উচিত, এবং FileExistsফাংশনটি নিক্ষেপ করার জন্য তৈরি করা হয়েছে এমন ক্ষেত্রে (বা সি # সমমানের যে কোনও কিছু) ব্যতিক্রম ধরা উচিত ।
জো তাই

6
অন্যরা যেমন উল্লেখ করেছে, কল করার প্রয়োজন নেই Existsএবং এটি আসলে একটি নতুন ব্যর্থতার শর্ত তৈরি করে।
এড এস

3
@ মার্টিনস্মিথ: তারপরে কেবল ডিরেক্টরি তৈরি করুন। এর আগে অস্তিত্বের জন্য যাচাই করবেন না। এটি কেবল খাটো নয়। এটির এপিআই কী তা ভুল ধারণা দেয় না System.IO.Directory.CreateDirectory। (এবং এটি দ্রুত, তবে সম্ভবত এটি কোনও ব্যাপার নয়)
জো সো

223

শুধু এই লাইন লিখুন:

System.IO.Directory.CreateDirectory("my folder");
  • ফোল্ডারটি এখনও উপস্থিত না থাকলে এটি তৈরি করা হবে
  • যদি ফোল্ডারটি ইতিমধ্যে বিদ্যমান থাকে তবে লাইনটি উপেক্ষা করা হবে

তথ্যসূত্র: এমএসডিএন-এ ডিরেক্টরি সম্পর্কিত ডিরেক্টরি তৈরি করুন re

অবশ্যই, আপনি using System.IO;উত্স ফাইলের শীর্ষেও লিখতে পারেন এবং তারপরে Directory.CreateDirectory("my folder");আপনি যখনই কোনও ফোল্ডার তৈরি করতে চান প্রতিবারই লিখতে পারেন।


28

Directory.CreateDirectory ফাইলপথের অস্তিত্ব না থাকলে কীভাবে চেষ্টা করবেন এবং কীভাবে তৈরি করবেন তা ব্যাখ্যা করে

Directory.Existsফাইলপথ উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন। তবে, আপনার এটির দরকার নেই কারণ ক্রিয়েট ডিরেক্টরী আপনার জন্য যাচাই করবে will


@ তাভৌসি জিরোহেন প্রদত্ত এই কাজগুলি ভাল শুরু হবে;)
অ্যালান চুয়া

এমএসডিএন ডকুমেন্টেশন লিঙ্কগুলির কোনওটিই এই মুহুর্তে এমনকি এমএসডিএন অনুসন্ধানের মাধ্যমে কাজ করছে বলে মনে হচ্ছে না ...
জিরোনেহ

লিঙ্কগুলি এখন ঠিক আছে
আনন্দ

এটি জাতি শর্তাবলী সক্ষম করে, স্বীকৃত উত্তর দেখুন
কমফ্রিচ

27

নীচের মতো কোনও পদ্ধতি সহ এখনও যদি এটির অস্তিত্ব না থাকে তবে আপনি এটি তৈরি করতে পারেন:

using System.IO;

private void CreateIfMissing(string path)
{
  bool folderExists = Directory.Exists(Server.MapPath(path));
  if (!folderExists)
    Directory.CreateDirectory(Server.MapPath(path));
}

6
চেক if (!folderExists)প্রয়োজন হয় না।
বাজিলিক

8
@ বাজাজিলিক হ্যাঁ, তবে এটি অভিপ্রায় প্রকাশ করে। এপিআই কীভাবে এটি পরিচালনা করে তা আমার অনুমান করতে হবে (বা নিশ্চিতভাবে জানতে হবে)। এই কোডটি যে কেউ পড়বে সে কী হবে তা নিশ্চিতভাবে জানবে।
ডেনিস ট্রাব

4
মাল্টিথ্রেডেড পরিবেশে (যেমন একটি ফাইল সিস্টেমের অবস্থা) আপনার কাছে কেবল লকিং বা ট্রাই-এন্ড-ক্যাচ করার পছন্দ থাকে। উপরের স্নিপেটের একটি রেসের শর্ত রয়েছে। ফাংশনটি একটি FileExistsব্যতিক্রম ছুঁড়ে ফেলতে পারে (বা এটি সি # তে যা কিছু বলা হয়)
জো সো

9
"এটি উদ্দীপনা প্রকাশ করে" - এটি ভাল ন্যায়সঙ্গততা নয়। আপনি কেবল কোডটিতে একটি মন্তব্য লিখতে পারেন।
জিম বাল্টার

15

এই পদ্ধতিটি উপস্থিত না থাকলে ফোল্ডার তৈরি করবে এবং উপস্থিত থাকলে কিছুই করবে না

Directory.CreateDirectory(path);

14
using System.IO

if (!Directory.Exists(yourDirectory))
    Directory.CreateDirectory(yourDirectory);

14

আপনি চেষ্টা / ধরার ধারাটি ব্যবহার করতে পারেন এবং এটি বিদ্যমান কিনা তা পরীক্ষা করতে পারেন:

  try
  {
    if (!Directory.Exists(path))
    {
       // Try to create the directory.
       DirectoryInfo di = Directory.CreateDirectory(path);
    }
  }
  catch (IOException ioex)
  {
     Console.WriteLine(ioex.Message);
  }

8
এটি একটি ভাল উত্তর, তবে, এমএসডিএন ডকুমেন্টেশন অনুসারে, "পাথের মধ্যে সুনির্দিষ্ট যে কোনও এবং সমস্ত ডিরেক্টরি তৈরি করা হয়েছে, যদি না তারা ইতিমধ্যে উপস্থিত থাকে বা পাথের কিছু অংশ অবৈধ না হয় path "ডিরেক্টরি যদি ইতিমধ্যে বিদ্যমান থাকে তবে এই পদ্ধতিটি কিছুই করে না।" সুতরাং, আপনার ডিরেক্টরিটির সত্যই দরকার নেই Eএক্সজিস্টগুলি (পথ)।
কেন

2
এটি সত্য তবে এটি একটি অনুমানও তাই এমএসডিএন যা বলে তা বিবেচনা না করে বরং পরীক্ষা করা সর্বদা সেরা ...
মেথডম্যান

6
@ ডিজে ক্র্যাজ, আমি বিশ্বাস করি যে এমএসডিএন যদি ভুল প্রমাণিত না হয়। আপনি বিপরীতে প্রস্তাব দিন - এমএসডিএন যা বলে তা উপেক্ষা করুন এবং আপনার কোডে অতিরিক্ত (অপ্রয়োজনীয়) চেক যুক্ত করুন। আপনি কোথায় রেখা আঁকেন?
পলিফুন

1
শেল শক কোথাও আমি এড়িয়ে চলা বলি না .. এটি একটি দৃum় বক্তব্য আমি বলছি অনুমান করার চেয়ে ধরে নেওয়া ভাল না .. আমি আবার যা বলেছি তা পড়ুন .. ধন্যবাদ
মেথডম্যান

3
@DJKRAZE- কেও কিছু অনুমান করছে না। ম্যানুয়ালটিতে এটি সরল ইংরেজীতে লেখা আছে যে চেক করা প্রয়োজন হয় না।
বাজিলিক


6

নিম্নলিখিত কোডটি আমি ব্যবহার করি এমন কোডের সেরা লাইন (গুলি) যা উপস্থিত না থাকলে ডিরেক্টরি তৈরি করবে।

System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/temp/"));

ডিরেক্টরি যদি ইতিমধ্যে বিদ্যমান থাকে তবে এই পদ্ধতিটি কোনও নতুন ডিরেক্টরি তৈরি করে না, তবে এটি বিদ্যমান ডিরেক্টরিটির জন্য একটি DirectoryInfo অবজেক্ট প্রদান করে। >


ডিরেক্টরি উপস্থিত না থাকলে ক্রিয়েট ডিরেক্টরী ইতিমধ্যে চেক পরিচালনা করে।
বার্গমিস্টার

@ বার্মিস্টার, ধন্যবাদ। আমি সবেমাত্র চেক পেরিয়েছি। এটি সত্যই শর্তসাপেক্ষ চেক অপসারণ করেছে। আপডেট হয়েছে !!
ইউজেএস

4

এই উত্তরটি আমি সন্ধান করছিলাম, তবে সহজে খুঁজে পেলাম না:

        string pathToNewFolder = System.IO.Path.Combine(parentFolderPath, "NewSubFolder");
        DirectoryInfo directory = Directory.CreateDirectory(pathToNewFolder); 
       // Will create if does not already exist (otherwise will ignore)
  • নতুন ফোল্ডারে পাথ দেওয়া হয়েছে
  • ডিরেক্টরি তথ্য পরিবর্তনশীল যাতে আপনি এটি আপনার নিজের মতো করে চালিয়ে যাওয়া চালিয়ে যেতে পারেন।

0

কোড নীচে ব্যবহার করুন। আমি ফাইলটি অনুলিপি করতে এবং নতুন ফোল্ডার তৈরি করার জন্য এই কোডটি ব্যবহার করেছি।

string fileToCopy = "filelocation\\file_name.txt";
String server = Environment.UserName;
string newLocation = "C:\\Users\\" + server + "\\Pictures\\Tenders\\file_name.txt";
string folderLocation = "C:\\Users\\" + server + "\\Pictures\\Tenders\\";
bool exists = System.IO.Directory.Exists(folderLocation);

if (!exists)
{
   System.IO.Directory.CreateDirectory(folderLocation);
   if (System.IO.File.Exists(fileToCopy))
   {
     MessageBox.Show("file copied");
     System.IO.File.Copy(fileToCopy, newLocation, true);

   }
   else
   {
      MessageBox.Show("no such files");

   }
}

0

স্ট্রিং তৈরিফোল্ডার = "ই: / টিএমপি /" + ইউআইডি;
System.IO.Directory.CreateDirectory (createfolder);


0

ইমেজ ফোল্ডার বা অন্য ফোল্ডারগুলির অধীনে ফোল্ডারটি উপস্থাপন না করা থাকলে এই কোডটি ব্যবহার করুন

 string subPath = HttpContext.Current.Server.MapPath(@"~/Images/RequisitionBarCode/");
            bool exists = System.IO.Directory.Exists(subPath);
            if(!exists)
            System.IO.Directory.CreateDirectory(subPath); 
string path = HttpContext.Current.Server.MapPath(@"~/Images/RequisitionBarCode/" + OrderId + ".png");

-1

একটি অভিনব উপায় FileUploadআপনি যে পদ্ধতিটি চান তা বাড়িয়ে দেওয়া ।

এটি যুক্ত করুন:

public static class FileUploadExtension
{
    public static void SaveAs(this FileUpload, string destination, bool autoCreateDirectory) { 

        if (autoCreateDirectory)
        {
            var destinationDirectory = new DirectoryInfo(Path.GetDirectoryName(destination));

            if (!destinationDirectory.Exists)
                destinationDirectory.Create();
        }

        file.SaveAs(destination);
    }
}

তারপরে এটি ব্যবহার করুন:

FileUpload file;
...
file.SaveAs(path,true);

-3
string root = @"C:\Temp";

string subdir = @"C:\Temp\Mahesh";

// If directory does not exist, create it.

if (!Directory.Exists(root))
{

Directory.CreateDirectory(root);

}

ক্রেডিট ডিরেক্টরী একটি সাব ডিরেক্টরি তৈরি করতেও ব্যবহৃত হয়। সকল আপনাকে যা করতে হবে ডিরেক্টরির মধ্যে এই সাব তৈরি করা হবে পাথ নির্দিষ্ট হয়। নিম্নলিখিত কোড স্নিপেট একটি মহেশ সাব সৃষ্টি C:\Temp directory

// Create sub directory

if (!Directory.Exists(subdir))
{

Directory.CreateDirectory(subdir);

}

-5

একাধিক উত্তর থেকে উত্পন্ন / একত্রিত, আমার জন্য এটি প্রয়োগ করা এতটা সহজ ছিল:

public void Init()
{
    String platypusDir = @"C:\platypus";
    CreateDirectoryIfDoesNotExist(platypusDir);
}

private void CreateDirectoryIfDoesNotExist(string dirName)
{
    System.IO.Directory.CreateDirectory(dirName);
}

6
মূলত একটি সামান্য আলাদা নাম সহ একটি সঠিক পদ্ধতি অনুলিপি করে কী বোঝাতে পারে? আপনি আক্ষরিকভাবে এ থেকে কিছুই অর্জন।
ক্রিথিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.