ফাইল তৈরির অস্তিত্ব না থাকলে আমি কীভাবে ডিরেক্টরি তৈরি করব?


202

আমার কাছে এখানে কোডের একটি টুকরা রয়েছে যা যদি ডিরেক্টরিটি উপস্থিত না থাকে তবে ব্রেক হয়:

System.IO.File.WriteAllText(filePath, content);

এক লাইনে (বা কয়েকটি লাইন), নতুন ফাইলের দিকে পরিচালিত ডিরেক্টরিটি উপস্থিত নেই কিনা তা পরীক্ষা করে পরীক্ষা করা সম্ভব হয় এবং না থাকলে নতুন ফাইলটি তৈরি করার আগে এটি তৈরি করা যায় কি?

আমি .NET 3.5 ব্যবহার করছি।



@ টিমশ্মেল্টার, "সম্ভাব্য সদৃশ" পরিষ্কার-আপ করার একটি উপায় - অনুরূপ প্রশ্নগুলি বন্ধ করতে এবং সর্বোত্তম উত্তরের সাথে একটি রাখার জন্য। তারিখটি অত্যাবশ্যক নয়। মেটা.স্ট্যাকেক্সেঞ্জাওন.কম / সেকশনস / ১৪7643৩/২ দেখুন। আপনি যদি স্বীকার করেন যে এর স্পষ্টতা দরকার তবে দয়া করে মেটা.স্ট্যাকেক্সেঞ্জ
মাইকেল ফ্রেইজিম

উত্তর:


394

তৈরী করতে

(new FileInfo(filePath)).Directory.Create() ফাইল লেখার আগে।

.... বা, যদি এটি বিদ্যমান থাকে, তবে তৈরি করুন (অন্যথায় কিছু করবেন না)

System.IO.FileInfo file = new System.IO.FileInfo(filePath);
file.Directory.Create(); // If the directory already exists, this method does nothing.
System.IO.File.WriteAllText(file.FullName, content);

5
মার্জিত সমাধান যেমন পরিস্থিতি পরিচালনা করে যা নেস্টেড ফোল্ডার তৈরির প্রয়োজন।
ডেনি জ্যাকব

ধন্যবাদ! আমি stackoverflow.com/questions/9065598 দেখেছি , কিন্তু আমি কোনও ফাইলের পরম পথ দিয়ে শুরু করতে চেয়েছিলাম, এবং পথটি বিভক্ত করার সাথে মোকাবিলা করতে চাইনি। এখন আমি জানি যে আপনি ফাইলআইএনফো উদাহরণ থেকে ডিরেক্টরিটি অ্যাক্সেস করতে পারেন।
জোহান

এটি করার একটি অ্যাসিঙ্ক উপায় আছে?
জো ফিলিপস

1
আমি মনে করি আপনি এটি করতে পারেন Task.Run(() => );
ডন

107

আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন

  DirectoryInfo di = Directory.CreateDirectory(path);

41
Directory.CreateDirectoryআপনি যা চান ঠিক তেমনটি করে: এটি ডিরেক্টরিটি তৈরি করে যদি এটি উপস্থিত না থাকে। প্রথমে সুস্পষ্ট চেক করার দরকার নেই
পাওলো মোরেটি

13
pathডিরেক্টরি যদি ফাইল না হয় তবে একটি আইওএক্সেপশন নিক্ষেপ করে । msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx
scaryman

34

@ হিটেক যেমন বলেছেন, আপনার অবশ্যই নিশ্চিত থাকতে হবে যে আপনার সঠিক অনুমতি রয়েছে, আপনি যদি করেন তবে আপনি এই লাইনটি ডিরেক্টরিটির অস্তিত্ব নিশ্চিত করতে ব্যবহার করতে পারেন:

Directory.CreateDirectory(Path.GetDirectoryName(filePath))


0

আপনার ফাইলটিকে অস্তিত্বহীন ডিরেক্টরিতে স্থানান্তরিত করার একটি দুর্দান্ত উপায় হ'ল নিম্নলিখিত এক্সটেনশনটি দেশীয় ফাইলআইএনফো ক্লাসে তৈরি করা:

public static class FileInfoExtension
{
    //second parameter is need to avoid collision with native MoveTo
    public static void MoveTo(this FileInfo file, string destination, bool autoCreateDirectory) { 

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

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

        file.MoveTo(destination);
    }
}

তারপরে ব্র্যান্ডের নতুন মুভটো এক্সটেনশনটি ব্যবহার করুন:

 using <namespace of FileInfoExtension>;
 ...
 new FileInfo("some path")
     .MoveTo("target path",true);

পদ্ধতি এক্সটেনশন ডকুমেন্টেশন চেক করুন ।


-1

আপনি ব্যবহার করতে পারেন File.Exists ফাইলটি বিদ্যমান চেক করতে এবং এটি ব্যবহার তৈরি File.Create প্রয়োজনে। আপনার সেই স্থানে ফাইল তৈরি করার অ্যাক্সেস আছে কিনা তা পরীক্ষা করে দেখুন।

একবার ফাইলটি উপস্থিত থাকার বিষয়ে নিশ্চিত হয়ে গেলে আপনি নিরাপদে এটিতে লিখতে পারেন। সতর্কতা হিসাবে, আপনার কোডটি চেষ্টা করে রাখা উচিত ... ব্লক ধরুন এবং যদি ব্যপারগুলি উত্থাপিত হওয়ার সম্ভাবনা থাকে তবে জিনিসগুলি যেমন পরিকল্পনা মতো ঠিকঠাক না চলে যায় catch

বেসিক ফাইল I / O ধারণাগুলির জন্য অতিরিক্ত তথ্য


আমি প্রথমে আপনার প্রশ্নটি ভুলভাবে পড়েছি যে আপনি এমন কোনও ফাইলে লিখতে চেয়েছিলেন যা অস্তিত্বহীন। ধারণাগুলি মূলত ফাইল এবং ডিরেক্টরি আইও এর ক্ষেত্রে একই রকম।
হিটেক

-2

var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));

var file = new FileInfo(filePath);

file.Directory.Create(); ডিরেক্টরি ইতিমধ্যে বিদ্যমান থাকলে, এই পদ্ধতিটি কিছুই করে না।

var sw = new StreamWriter(filePath, true);

sw.WriteLine(Enter your message here);

sw.Close();

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.