C # /। NET में एक खाली फ़ाइल बनाने का सबसे सरल / विहित तरीका क्या है?
अब तक का सबसे सरल तरीका है:
System.IO.File.WriteAllLines(filename, new string[0]);
C # /। NET में एक खाली फ़ाइल बनाने का सबसे सरल / विहित तरीका क्या है?
अब तक का सबसे सरल तरीका है:
System.IO.File.WriteAllLines(filename, new string[0]);
जवाबों:
बस का उपयोग करके File.Createफ़ाइल को खुला छोड़ देंगे, जो संभवत: वह नहीं है जो आप चाहते हैं।
आप उपयोग कर सकते हैं:
using (File.Create(filename)) ;
थोड़ा अजीब लग रहा है, तुम मन। आप इसके बजाय ब्रेसिज़ का उपयोग कर सकते हैं:
using (File.Create(filename)) {}
या Disposeसीधे कॉल करें :
File.Create(filename).Dispose();
किसी भी तरह से, यदि आप इसे एक से अधिक स्थानों पर उपयोग करने जा रहे हैं, तो आपको इसे सहायक विधि में लपेटने पर विचार करना चाहिए, जैसे
public static void CreateEmptyFile(string filename)
{
File.Create(filename).Dispose();
}
ध्यान दें कि Disposeकिसी usingकथन का उपयोग करने के बजाय सीधे कॉल करने से वास्तव में यहां बहुत अंतर नहीं पड़ता है, जहां तक मैं बता सकता हूं - एकमात्र तरीका यह अंतर कर सकता है यदि थ्रेड को कॉल File.Createऔर कॉल के बीच निरस्त किया गया था Dispose। यदि वह दौड़ की स्थिति मौजूद है, तो मुझे संदेह है कि यहusing संस्करण में भी मौजूद होगा , यदि File.Createमूल्य वापस किए जाने से ठीक पहले विधि के अंत में थ्रेड का गर्भपात किया गया था ...
using (File.Create(filename)) ;रहा था , लेकिन मुझे सादगी पसंद हैFile.Create(filename).Dispose();
File.Create(filename).Dispose();इसके बजाय उपयोग कर रहा हूं ।
Close()संसाधनों को भी जारी करेगा। Close()सिर्फ कॉल Dispose- देख github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/...
using (new FileStream(filename, FileMode.CreateNew)) { }
File.WriteAllText("path", String.Empty);
या
File.CreateText("path").Close();
File.WriteAllText(string, string)का उपयोग करता है "UTF-8 एन्कोडिंग एक बाइट आदेश मार्क के बिना (BOM)" । यदि आप अभी भी एक को देखते हैं, तो वह WriteAllText या उसके प्रलेखन के लायक रिपोर्टिंग में एक बग होगा।
Encoding.UTF8एक एनकोडर देता है जो बाइट ऑर्डर मार्क (BOM) को आउटपुट करता है। आप new UTF8Encoding(false)UTF8 एनकोडर प्राप्त करने के लिए उपयोग कर सकते हैं जो BOM आउटपुट नहीं करता है।
WriteAllTextवास्तव में .NET के पिछले संस्करण में अलग व्यवहार करता है। हालाँकि, अतिरिक्त सुनिश्चित होने के लिए, केवल एन्कोडिंग भाग को छोड़ें और File.WriteAllBytes(path, new byte[] { });इसके बजाय उपयोग करें ।
System.IO.File.Create(@"C:\Temp.txt");
जैसा कि दूसरों ने बताया है, आपको इस वस्तु का निपटान करना चाहिए या इसे एक खाली उपयोग कथन में लपेटना चाहिए।
using (System.IO.File.Create(@"C:\Temp.txt"));
किसी मौजूदा फ़ाइल के उपयोग से गलती से बचने के लिए:
using (new FileStream(filename, FileMode.CreateNew)) {}
... और IOException को हैंडल करें जो तब होगा जब फ़ाइल पहले से मौजूद है।
File.Create, जो अन्य उत्तरों में सुझाया गया है, अगर फ़ाइल पहले से मौजूद है तो सामग्री को अधिलेखित कर देगा। साधारण मामलों में आप इसका उपयोग करके इसे कम कर सकते हैं File.Exists()। हालाँकि कुछ अधिक मजबूत परिदृश्यों में आवश्यक है जहाँ एक साथ एक ही फ़ोल्डर में कई थ्रेड और / या प्रक्रियाएँ फ़ाइल बनाने का प्रयास कर रही हैं।
खाली फ़ाइल बनाने के लिए कुछ हद तक सामान्य उपयोग का मामला प्रक्रिया संचार में अधिक परिष्कृत की अनुपस्थिति में एक अलग प्रक्रिया में हो रही कुछ और को ट्रिगर करना है। इस मामले में, यह फ़ाइल निर्माण को बाहरी दुनिया के दृष्टिकोण से परमाणु होने में मदद कर सकता है (विशेषकर यदि ट्रिगर की जा रही चीज़ फ़ाइल को ट्रिगर को "उपभोग" करने के लिए नष्ट करने जा रही है)।
तो यह उसी निर्देशिका में एक जंक नाम (Guid.NewGuid.ToString ()) बनाने में मदद कर सकता है जिस फ़ाइल को आप बनाना चाहते हैं, और फिर अस्थायी नाम से अपने इच्छित नाम के लिए एक File.Move करें। अन्यथा ट्रिगर कोड जो फ़ाइल अस्तित्व के लिए जाँच करता है और फिर ट्रिगर को हटा देता है दौड़ की स्थिति में चल सकता है जहां फ़ाइल पूरी तरह से बंद होने से पहले हटा दी जाती है।
उसी डायरेक्टरी (और फाइल सिस्टम) में टेंप फाइल होने से आपको वह एटमिटी मिल सकती है जो आप चाहते हैं। यह कुछ ऐसा देता है।
public void CreateEmptyFile(string path)
{
string tempFilePath = Path.Combine(Path.GetDirectoryName(path),
Guid.NewGuid.ToString());
using (File.Create(tempFilePath)) {}
File.Move(tempFilePath, path);
}
Path.GetTempFileName () खाली फ़ाइल नाम का एक uniquly बनाएगा और उस पर पथ लौटाएगा।
यदि आप पथ को नियंत्रित करना चाहते हैं, लेकिन एक यादृच्छिक फ़ाइल नाम प्राप्त करें, तो आप GetRandomFileName का उपयोग केवल एक फ़ाइल नाम स्ट्रिंग वापस करने और इसे बनाने के साथ कर सकते हैं
उदाहरण के लिए:
string fileName=Path.GetRandomFileName();
File.Create("custom\\path\\" + fileName);