সি # তে একটি খালি ফাইল তৈরি করা হচ্ছে


185

সি # /। নেট এ খালি ফাইল তৈরি করার সহজ / প্রমানিক উপায় কী?

আমি এখন পর্যন্ত সবচেয়ে সহজ উপায়টি খুঁজে পেলাম:

System.IO.File.WriteAllLines(filename, new string[0]);

উত্তর:


384

জাস্ট ব্যবহারের File.Createফলে ফাইলটি উন্মুক্ত হয়ে যাবে, যা সম্ভবত আপনি চান তা নয়।

আপনি ব্যবহার করতে পারেন:

using (File.Create(filename)) ;

কিছুটা অদ্ভুত দেখাচ্ছে, মনে রাখবেন mind পরিবর্তে আপনি ধনুর্বন্ধনী ব্যবহার করতে পারেন:

using (File.Create(filename)) {}

অথবা কেবল Disposeসরাসরি কল করুন :

File.Create(filename).Dispose();

যে কোনও উপায়ে, আপনি যদি একাধিক জায়গায় এটি ব্যবহার করতে যাচ্ছেন তবে আপনার সম্ভবত এটি কোনও সহায়ক পদ্ধতিতে মোড়ানো বিবেচনা করা উচিত eg

public static void CreateEmptyFile(string filename)
{
    File.Create(filename).Dispose();
}

লক্ষ্য করুন কলিং Disposeএকটি ব্যবহারের পরিবর্তে সরাসরি usingবিবৃতি সত্যিই যতটা আমি বলতে পারেন এখানে অনেক পার্থক্য করতে না - একমাত্র উপায় এটা পারে করা যদি থ্রেড থেকে কল মধ্যে বাতিল হয়েছে একটি পার্থক্য আছে File.Createএবং কল Dispose। যে জাতি শর্ত বিদ্যমান, আমি এটা হবে সন্দেহ এছাড়াও মধ্যে উপস্থিত using, সংস্করণ যদি থ্রেড খুব শেষে বাতিল করা হয়েছে File.Createপদ্ধতি, ঠিক আগে মান হয় ...


8
হাস্যকর. আমি ঠিক প্রায় 5 মিনিট আগে একই কোডটি লিখেছিলাম। আমি ফাইল.ক্রিয়েট (ফাইলের নাম) করেছি .ক্লোজ (); একই রকম পার্থক্য ...
ব্রায়ান জেনিসিও

2
আমার কোডটি ব্যবহার করা হচ্ছে using (File.Create(filename)) ;, তবে আমি সরলতা পছন্দ করিFile.Create(filename).Dispose();
ভাদিম

@ ব্রায়ানজেসিও: আমি প্রায় 5 মিনিট আগেও একই কোডটি করেছি! অন্যান্য প্রোগ্রামাররা এটি কীভাবে করেছে তা দেখতে আমি কেবল গুগল করেছিলাম। এখন আমি File.Create(filename).Dispose();পরিবর্তে ব্যবহার করছি ।
জ্যাক

1
@ ব্যবহারকারী 3791372: Close()পাশাপাশি সংস্থানগুলি প্রকাশ করবে। Close()সবেমাত্র কল করুন Dispose- github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/… দেখুন
জন স্কিটি

1
এটি সুস্পষ্ট নাও হতে পারে যে ফাইলটি ইতিমধ্যে উপস্থিত থাকলে এবং কেবল পঠনযোগ্য না হলে ফাইলের বিষয়বস্তু ওভাররাইট করা হয়। এই সমস্যা এড়ানোর জন্য, ব্যবহারusing (new FileStream(filename, FileMode.CreateNew)) { }
ফিল Haselden

34
File.WriteAllText("path", String.Empty);

অথবা

File.CreateText("path").Close();

2
প্রথমটি ব্যবহার করে, ফাইলটি 3 বাইট দীর্ঘ: এনকোডিং কোড। দ্বিতীয়টি ব্যবহার করে ফাইলটি 0 বাইটের (সত্যিই খালি)।
ফিল্ম

1
@ ফিল: আপনি কি নিশ্চিত? ডকুমেন্টেশন বলছেন যে File.WriteAllText(string, string)ব্যবহারসমূহ "UTF-8 এনকোডিং একটি বাইট-অর্ডার মার্ক ছাড়া (BOM)" । আপনি যদি এখনও একটি দেখতে পান তবে এটি রাইটিংএলটেক্সটে একটি বাগ বা রিপোর্টিংয়ের মূল্যবান ডকুমেন্টেশন।
হেইনজি

আমার মনে আছে আমি চেষ্টা করেছি সম্ভবত এটি পূর্ববর্তী। নেট সংস্করণে একটি পুরানো বাগ ছিল? আমি ইউটিএফ 8 এনকোডিং (বা ইউনিকোড বা অন্য কিছু) স্পষ্টভাবে নির্দিষ্ট করে দিলে ফাইলটি খালি নয়: <ফাইল.উইরাইটআলটেক্সট ("c: \ del.txt", স্ট্রিং.এম্পটি, সিস্টেম.টেক্সট। এনকোডিং.আউটএফ 8);>
ফিল্ম

1
@ ফিল, Encoding.UTF8একটি এনকোডার প্রদান করে যা বাইট অর্ডার চিহ্ন (বিওএম) আউটপুট করে। আপনি new UTF8Encoding(false)কোনও ইউটিএফ 8 এনকোডার পেতে ব্যবহার করতে পারেন যা বিওএমকে আউটপুট দেয় না।
ড্যানিয়েল ক্র্যাবট্রি

1
WriteAllText.NET এর পূর্ববর্তী সংস্করণে সত্যিই আলাদা আচরণ করে কিনা তা জানেন না । তবে অতিরিক্ত নিশ্চিত হওয়ার জন্য, কেবল এনকোডিং অংশটি এড়িয়ে যান এবং File.WriteAllBytes(path, new byte[] { });পরিবর্তে ব্যবহার করুন।
জর্জেন স্টেইনব্লোক

20
System.IO.File.Create(@"C:\Temp.txt");

অন্যরা যেমন নির্দেশ করেছে, আপনার উচিত এই বিষয়টিকে নিষ্পত্তি করা বা খালি এটি বিবরণ দিয়ে মোড়ানো উচিত।

using (System.IO.File.Create(@"C:\Temp.txt"));

4
অবজেক্টটি ভালভাবে নিষ্পত্তি করা যাবে না? উদাহরণস্বরূপ: (System.IO.File.Create (
ফাইলপথ

@ কেন্তোরমিউড়া: আমার চিন্তাভাবনা ঠিক তাই, আমার উত্তর :)
জন স্কিটি

4

আপনি ফিরে আসা বস্তুর বাইরে পদ্ধতিগুলি চেইন করতে পারেন, যাতে আপনি কেবলমাত্র একটি একক স্টেটমেন্টে খালি করা ফাইলটি বন্ধ করতে পারেন।

File.Open("filename", FileMode.Create).Close();

4

দুর্ঘটনাক্রমে কোনও বিদ্যমান ফাইল ব্যবহারের ওভাররাইট করা এড়াতে:

using (new FileStream(filename, FileMode.CreateNew)) {}

... এবং আইওএক্সেপশন হ্যান্ডেল করুন যা ফাইলটি ইতিমধ্যে উপস্থিত থাকলে তা ঘটবে।

File.Create, যা অন্যান্য উত্তরে প্রস্তাবিত, ফাইলটি ইতিমধ্যে উপস্থিত থাকলে এর বিষয়বস্তুগুলিকে ওভাররাইট করে। সাধারণ ক্ষেত্রে আপনি এটি ব্যবহার করে প্রশমিত করতে পারেন File.Exists()। তবে একাধিক থ্রেড এবং / অথবা প্রক্রিয়া একই ফোল্ডারে একসাথে ফাইল তৈরি করার চেষ্টা করছে এমন পরিস্থিতিতে দৃশ্যের ক্ষেত্রে আরও শক্ত কিছু দরকার।


2

খালি ফাইল তৈরির জন্য কিছুটা সাধারণ ব্যবহারের ক্ষেত্র হ'ল প্রক্রিয়া যোগাযোগের ক্ষেত্রে আরও পরিশীলিতের অভাবে ভিন্ন প্রক্রিয়ায় ঘটে যাওয়া অন্য কোনও কিছুকে ট্রিগার করা। এই ক্ষেত্রে, এটি ফাইল তৈরির বাহ্যিক বিশ্বের দৃষ্টিভঙ্গি থেকে পারমাণবিক হতে সহায়তা করতে পারে (বিশেষত যদি জিনিসটি ট্রিগার করা হচ্ছে যা ট্রিগারটিকে "গ্রাস" করতে মুছে ফেলছে)।

সুতরাং আপনি যে ফাইলটি তৈরি করতে চান সেই একই ডিরেক্টরিতে একটি জাঙ্ক নাম (Guid.NewGuid.ToString ()) তৈরি করতে সহায়তা করতে পারে এবং তারপরে একটি ফাইল তৈরি করুন the অস্থায়ী নাম থেকে আপনার পছন্দসই নামটিতে সরান। অন্যথায় ট্রিগারযুক্ত কোড যা ফাইলের অস্তিত্বের জন্য যাচাই করে এবং তারপরে ট্রিগার মুছে ফেলা এমন রেস শর্তে চলে যেতে পারে যেখানে ফাইলটি পুরোপুরি বন্ধ হয়ে যাওয়ার আগে মুছে ফেলা হয়।

একই ডিরেক্টরিতে (এবং ফাইল সিস্টেম) টেম্প ফাইল থাকা আপনার পছন্দসই পারমাণবিকতা দেয়। এটি এরকম কিছু দেয়।

public void CreateEmptyFile(string path)
{
    string tempFilePath = Path.Combine(Path.GetDirectoryName(path),
        Guid.NewGuid.ToString());
    using (File.Create(tempFilePath)) {}
    File.Move(tempFilePath, path);
}

0

Path.GetTempFileName () একটি স্বতন্ত্র নামে খালি ফাইল তৈরি করবে এবং এর পথে ফিরে আসবে।

আপনি যদি পাথটি নিয়ন্ত্রণ করতে চান তবে একটি এলোমেলো ফাইলের নাম পেতে পারেন তবে আপনি কেবল ফাইলের নাম স্ট্রিং ফিরিয়ে দিতে এবং তৈরির মাধ্যমে এটি ব্যবহার করতে গেটআরন্ডমফিলনেম ব্যবহার করতে পারেন

উদাহরণ স্বরূপ:

string fileName=Path.GetRandomFileName();
File.Create("custom\\path\\" + fileName);

IMHO getTempFileName () পুরোপুরি ভুল নাম দেওয়া হয়েছে।
কে.হেরজাম

এই উত্তরটি কেন সঠিক নয়?
ক্রিপ্লেডস্মার্ফ

5
এটি দুটি কারণে অকার্যকর: ১. প্রশ্নটি এলোমেলো ফাইলের নাম তৈরির বিষয়ে কিছু জিজ্ঞাসা করে না, সুতরাং এটি একটি বিভ্রান্তি। ২. ফাইলটি বন্ধ হয় না, যার অর্থ আপনি যদি পরে অন্য কোনও ফাইল লেখক খোলার চেষ্টা করেন বা ফাইলটি সরান, এটি ব্যর্থ হবে।
সত্য

আমি আপনার পয়েন্টগুলি গ্রহণ করি তবে: 1. সমস্ত ফাইলের একটি নামের প্রয়োজন। এটি একটি সাধারণ ছিল। কোনও কিছুর সাথে সংঘর্ষ হওয়ার সম্ভাবনা ছিল না এমনটি পাওয়ার সুবিধাজনক উপায় ২. প্রশ্নটি ফাইল তৈরির বিষয়ে জিজ্ঞাসিত প্রশ্ন, যা প্রশ্নে কোডটি ন্যূনতমভাবে, তারপরে ফাইলটির পরিচালন কঠোরভাবে সৃষ্টির অংশ নয়, তাই আমি এটিকে বাদ দিয়েছি সরলতার পক্ষে এবং উত্তরটির উপরে প্রশ্নের জবাব কেন্দ্রীভূত রাখার জন্য
Crippledsmurf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.