खोज…


वाक्य - विन्यास

  • स्ट्रिंग स्रोत;
  • स्ट्रिंग गंतव्य;

पैरामीटर

पैरामीटर विवरण
source वह फ़ाइल जिसे किसी अन्य स्थान पर ले जाना है।
destination वह निर्देशिका जिसमें आप source को स्थानांतरित करना चाहते हैं (इस चर में फ़ाइल का नाम (और फ़ाइल एक्सटेंशन) भी होना चाहिए।

एक फ़ाइल हटाएँ

किसी फ़ाइल को हटाने के लिए (यदि आपके पास आवश्यक अनुमति है) उतना ही सरल है:

File.Delete(path);

हालाँकि कई चीजें गलत हो सकती हैं:

  • आपके पास आवश्यक अनुमतियां नहीं हैं ( UnauthorizedAccessException को फेंक दिया गया है)।
  • फ़ाइल किसी और के उपयोग में हो सकती है ( IOException को फेंक दिया गया है)।
  • निम्न स्तर की त्रुटि के कारण फ़ाइल को हटाया नहीं जा सकता है या मीडिया केवल-पढ़ने के लिए है ( IOException को फेंक दिया गया है)।
  • फ़ाइल अब मौजूद नहीं है ( IOException को फेंक दिया गया है)।

ध्यान दें कि अंतिम बिंदु (फ़ाइल मौजूद नहीं है) आमतौर पर इस तरह एक कोड स्निपेट के साथ परिवृत्त होता है:

if (File.Exists(path))
    File.Delete(path);

हालाँकि, यह एक परमाणु ऑपरेशन नहीं है और फ़ाइल को किसी अन्य व्यक्ति द्वारा File.Exists() और File.Delete() से पहले हटा दिया जा सकता है। I / O संचालन को संभालने के लिए सही दृष्टिकोण को अपवाद से निपटने की आवश्यकता होती है (जब ऑपरेशन विफल हो जाता है तो कार्रवाई का एक वैकल्पिक कोर्स मान लिया जा सकता है):

if (File.Exists(path))
{
    try
    {
        File.Delete(path);
    }
    catch (IOException exception)
    {
        if (!File.Exists(path))
            return; // Someone else deleted this file

        // Something went wrong...
    }
    catch (UnauthorizedAccessException exception)
    {
        // I do not have required permissions
    }
}

ध्यान दें कि यह I / O त्रुटियां कभी-कभी क्षणभंगुर होती हैं (उदाहरण के लिए उपयोग में फ़ाइल), और यदि कोई नेटवर्क कनेक्शन शामिल है, तो यह हमारी ओर से बिना किसी कार्रवाई के स्वचालित रूप से पुनर्प्राप्त हो सकता है। यह एक मैं / हे आपरेशन प्रत्येक प्रयास के बीच एक छोटी सी देरी के साथ कई बार पुन: प्रयास करना तो आम बात है:

public static void Delete(string path)
{
    if (!File.Exists(path))
        return;

    for (int i=1; ; ++i)
    {
        try
        {
            File.Delete(path);
            return;
        }
        catch (IOException e)
        {
            if (!File.Exists(path))
                return;

            if (i == NumberOfAttempts)
                throw;

            Thread.Sleep(DelayBetweenEachAttempt);
        }

        // You may handle UnauthorizedAccessException but this issue
        // will probably won't be fixed in few seconds...
    }
}

private const int NumberOfAttempts = 3;
private const int DelayBetweenEachAttempt = 1000; // ms

नोट: जब आप इस फ़ंक्शन को कॉल करते हैं, तो Windows वातावरण फ़ाइल वास्तव में डिलीट नहीं की जाएगी, यदि कोई अन्य व्यक्ति FileShare.Delete का उपयोग करके फ़ाइल को खोलता है, तो फ़ाइल को हटाया जा सकता है लेकिन यह प्रभावी रूप से केवल तभी होगा जब स्वामी फ़ाइल को बंद कर देगा।

टेक्स्ट फ़ाइल से अवांछित पंक्तियों को स्ट्रिप करें

पाठ फ़ाइल को बदलना आसान नहीं है क्योंकि इसकी सामग्री को चारों ओर ले जाना चाहिए। छोटी फ़ाइलों के लिए सबसे आसान तरीका है कि इसकी सामग्री को मेमोरी में पढ़ें और फिर संशोधित पाठ लिखें।

इस उदाहरण में हम एक फ़ाइल से सभी लाइनों को पढ़ते हैं और सभी रिक्त लाइनों को छोड़ देते हैं फिर हम मूल पथ पर वापस लिखते हैं:

File.WriteAllLines(path,
    File.ReadAllLines(path).Where(x => !String.IsNullOrWhiteSpace(x)));

यदि फ़ाइल मेमोरी में लोड करने के लिए बहुत बड़ी है और आउटपुट पथ इनपुट पथ से भिन्न है:

File.WriteAllLines(outputPath,
    File.ReadLines(inputPath).Where(x => !String.IsNullOrWhiteSpace(x)));

पाठ फ़ाइल एन्कोडिंग कनवर्ट करें

पाठ को एन्कोड किया गया सहेजा गया है ( स्ट्रिंग्स विषय भी देखें) तो कभी-कभी आपको इसकी एन्कोडिंग बदलने की आवश्यकता हो सकती है, यह उदाहरण मानता है (सरलता के लिए) यह फ़ाइल बहुत बड़ी नहीं है और इसे पूरी तरह से मेमोरी में पढ़ा जा सकता है:

public static void ConvertEncoding(string path, Encoding from, Encoding to)
{
    File.WriteAllText(path, File.ReadAllText(path, from), to);
}

जब रूपांतरण करते हैं तो यह मत भूलिए कि फ़ाइल में BOM (बाइट ऑर्डर मार्क) हो सकता है, यह समझने के लिए कि यह एन्कोडिंग . UTF8.GetString को कैसे प्रबंधित करता है, प्रस्तावना / BOM को ध्यान में नहीं रखता है

"टच" बड़ी मात्रा में फाइलें (अंतिम लिखने के समय को अपडेट करने के लिए)

यह उदाहरण बड़ी संख्या में फाइलों के अंतिम लिखने के समय ( System.IO.Directory.EnumerateFiles बजाय System.IO.Directory.GetFiles() ) का अद्यतन करता है। वैकल्पिक रूप से आप खोज पैटर्न निर्दिष्ट कर सकते हैं (डिफ़ॉल्ट "*.*" और अंततः निर्देशिका ट्री (न केवल निर्दिष्ट निर्देशिका) के माध्यम से खोज करें:

public static void Touch(string path,
                         string searchPattern = "*.*",
                         SearchOptions options = SearchOptions.None)
{
    var now = DateTime.Now;

    foreach (var filePath in Directory.EnumerateFiles(path, searchPattern, options))
    {
        File.SetLastWriteTime(filePath, now);
    }
}

निर्दिष्ट राशि से अधिक पुरानी फ़ाइलों को एन्यूमरेट करें

यह स्निपेट एक निर्दिष्ट आयु से अधिक पुरानी सभी फ़ाइलों को एन्यूमरेट करने के लिए एक सहायक कार्य है, यह उपयोगी है - उदाहरण के लिए - जब आपको पुरानी लॉग फाइल या पुराने कैश्ड डेटा को हटाना होगा।

static IEnumerable<string> EnumerateAllFilesOlderThan(
                               TimeSpan maximumAge,
                               string path,
                               string searchPattern = "*.*",
                               SearchOption options = SearchOption.TopDirectoryOnly)
{
    DateTime oldestWriteTime = DateTime.Now - maximumAge;

    return Directory.EnumerateFiles(path, searchPattern, options)
        .Where(x => Directory.GetLastWriteTime(x) < oldestWriteTime);
}

इस तरह इस्तेमाल किया:

var oldFiles = EnumerateAllFilesOlderThan(TimeSpan.FromDays(7), @"c:\log", "*.log");

ध्यान देने योग्य कुछ बातें:

  • खोजें का उपयोग किया जाता Directory.EnumerateFiles() के बजाय Directory.GetFiles() । Enumeration ज़िंदा है तो आपको तब तक इंतज़ार करने की ज़रूरत नहीं होगी, जब तक कि सभी फ़ाइल सिस्टम प्रविष्टियाँ प्राप्त नहीं हो जातीं।
  • हम पिछले लिखने के समय के लिए जाँच कर रहे हैं, लेकिन आप सृजन समय या अंतिम पहुँच समय का उपयोग कर सकते हैं (उदाहरण के लिए अप्रयुक्त कैश्ड फ़ाइलों को हटाने के लिए, ध्यान दें कि पहुँच समय अक्षम हो सकता है)।
  • ग्रैन्युलैरिटी उन सभी गुणों (लिखने का समय, पहुंच का समय, निर्माण समय) के लिए समान नहीं है, इस बारे में विवरण के लिए MSDN की जांच करें।

एक स्थान से दूसरे स्थान पर एक फ़ाइल ले जाएँ

File.Move

फ़ाइल को एक स्थान से दूसरे स्थान पर ले जाने के लिए, कोड की एक सरल रेखा इसे प्राप्त कर सकती है:

File.Move(@"C:\TemporaryFile.txt", @"C:\TemporaryFiles\TemporaryFile.txt");

हालांकि, कई चीजें हैं जो इस सरल ऑपरेशन के साथ गलत हो सकती हैं। उदाहरण के लिए, क्या होगा यदि आपके प्रोग्राम को चलाने वाले यूजर के पास 'C' लेबल वाली ड्राइव नहीं है? अगर उन्होंने क्या किया - लेकिन उन्होंने इसका नाम बदलकर 'B', या 'M' करने का फैसला किया?

क्या होगा यदि स्रोत फ़ाइल (जिस फ़ाइल को आप स्थानांतरित करना चाहते हैं) को आपके जानने के बिना स्थानांतरित कर दिया गया है - या क्या होगा यदि यह बस मौजूद नहीं है।

स्रोत फ़ाइल मौजूद है या नहीं यह देखने के लिए पहले जाँच करके इसे दरकिनार किया जा सकता है:

string source = @"C:\TemporaryFile.txt", destination = @"C:\TemporaryFiles\TemporaryFile.txt";
if(File.Exists("C:\TemporaryFile.txt"))
{
    File.Move(source, destination);
}

यह सुनिश्चित करेगा कि उसी क्षण, फ़ाइल मौजूद है, और इसे किसी अन्य स्थान पर ले जाया जा सकता है। ऐसे समय हो सकते हैं जहां File.Exists लिए एक साधारण कॉल पर्याप्त नहीं होगी। यदि यह नहीं है, तो फिर से जांचें, उपयोगकर्ता को बताएं कि ऑपरेशन विफल हो गया - या अपवाद को संभालना।

एक FileNotFoundException एकमात्र अपवाद नहीं है जिसका आप सामना करने की संभावना रखते हैं।

संभावित अपवादों के लिए नीचे देखें:

अपवाद प्रकार विवरण
IOException फ़ाइल पहले से मौजूद है या स्रोत फ़ाइल नहीं मिली।
ArgumentNullException स्रोत और / या गंतव्य मापदंडों का मूल्य शून्य है।
ArgumentException स्रोत और / या गंतव्य पैरामीटर का मान रिक्त है, या अमान्य वर्ण हैं।
UnauthorizedAccessException इस क्रिया को करने के लिए आपके पास आवश्यक अनुमतियां नहीं हैं।
PathTooLongException स्रोत, गंतव्य या निर्दिष्ट पथ अधिकतम लंबाई से अधिक है। विंडोज पर, एक पथ की लंबाई 248 वर्णों से कम होनी चाहिए, जबकि फ़ाइल नाम 260 वर्णों से कम होने चाहिए।
DirectoryNotFoundException निर्दिष्ट निर्देशिका नहीं मिली।
NotSupportedException स्रोत या गंतव्य पथ या फ़ाइल नाम एक अमान्य प्रारूप में हैं।


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow