2010-06-09 15 views
37

मैं कैसे जांचूं कि फ़ाइल सी # में खाली है या नहीं? यदि फ़ाइल सब पर मौजूद है,फ़ाइल खाली है चेक

if(new FileInfo("file").Length == 0) 
{ 
    // empty 
} 

Exists संपत्ति की जाँच करें पता लगाने के लिए:

if (file is empty) 
{ 
//do stuff 
} 

else 
{ 
//do other stuff 
} 

उत्तर

83

उपयोग FileInfo.Length:

की तरह कुछ की जरूरत है।

+0

इसका परीक्षण किया गया। वही है जो मैं चाहता हूं। मूल्यांकन किया और ticked। धन्यवाद – Arcadian

+2

नोट: 'नई फ़ाइलइन्फो ("फ़ाइल")। अगर फ़ाइल मौजूद नहीं है, तो' फ़ाइल नॉटफाउंड अपवाद 'फेंक देगा, इसलिए अगर कोई मामला मौजूद नहीं है तो' मौजूदियों 'संपत्ति की जांच करना सुनिश्चित करें 'लंबाई' की जांच करने से पहले। –

+0

बड़ी सहायता। धन्यवाद! – snapper

5
if (!File.Exists(FILE_NAME)) 
    { 
     Console.WriteLine("{0} does not exist.", FILE_NAME); 
     return; 
    } 
    else 
    { 
     if (new FileInfo(FILE_NAME).Length == 0) 
     { 
      Console.WriteLine("{0} is empty", FILE_NAME); 
      return; 

     } 

    } 
+4

चूंकि आप अपने पहले ब्लॉक में लौट रहे हैं, इसलिए आप अन्य ब्लॉक को पूरी तरह से छोड़ सकते हैं। या, आप 'else if' में विलय कर सकते हैं। –

+1

सही कथन। – Mike

+0

बहुत उपयोगी, बहुत बहुत धन्यवाद। – OammieR

9

समस्या यह है कि फ़ाइल सिस्टम अस्थिर है। विचार करें:

if (new FileInfo(name).Length > 0) 
{ //another process or the user changes or even deletes the file right here 

    // More code that assumes and existing, empty file 
} 
else 
{ 


} 

यह और हो सकता है। आम तौर पर, जिस तरह से आपको फ़ाइल-io परिदृश्यों को संभालने की आवश्यकता होती है, अपवाद ब्लॉक का उपयोग करने के लिए प्रक्रिया को फिर से सोचना है, और फिर अपने विकास का समय अच्छा अपवाद हैंडलर लिखने में रखना है।

+4

ओपी के कार्यक्रम के लिए, ये समस्याएं चिंता का विषय नहीं हो सकती हैं। "सही का दुश्मन सही है।" – Brian

+0

अच्छा बिंदु। – Arcadian

0
//You can use this function, if your file exists as content, and is always copied to your debug/release directory. 

    /// <summary> 
    /// Include a '/' before your filename, and ensure you include the file extension, ex. "/myFile.txt" 
    /// </summary> 
    /// <param name="filename"></param> 
    /// <returns>True if it is empty, false if it is not empty</returns> 
    private Boolean CheckIfFileIsEmpty(string filename) 
    { 
     var fileToTest = new FileInfo(Environment.CurrentDirectory + filename); 
     return fileToTest.Length == 0; 
    } 
1

इस प्रकार मैंने समस्या हल की। यह जांच करेगा कि फ़ाइल पहले मौजूद है या नहीं, तो लंबाई की जांच करें। मैं प्रभावी रूप से खाली होने के लिए एक गैर-मौजूद फ़ाइल पर विचार करता हूं।

var info = new FileInfo(filename); 
if ((!info.Exists) || info.Length == 0) 
{ 
    // file is empty or non-existant  
} 
1

अलावा @tanascius का जवाब देने के लिए है, तो आप उपयोग कर सकते हैं

try 
{ 
    if (new FileInfo("your.file").Length == 0) 
    { 
     //Write into file, i guess  
    } 
} 
catch (FileNotFoundException e) 
{ 
    //Do anything with exception 
} 

और यह कर देगा केवल यदि फ़ाइल मौजूद है, पकड़ बयान आप फ़ाइल बना सकते हैं, और चलाने के लिए पुन: कोड में।

+1

को रेट किया गया आपको अपने कैच स्टेटमेंट में ऐसा कुछ नहीं करना चाहिए। – UrbanEsc

2

मुझे पता चला है कि FileInfo.Length फ़ील्ड को जांचना हमेशा कुछ फ़ाइलों के लिए काम नहीं करता है। उदाहरण के लिए, और खाली .pkgdef फ़ाइल की लंबाई 3 है। इसलिए, मुझे वास्तव में फ़ाइल की सभी सामग्री को पढ़ना था और वापस करना था कि वह खाली स्ट्रिंग के बराबर था या नहीं।

+0

पोस्ट की समीक्षा करते समय मैं इस जवाब में आया। आपका स्वागत है, यह पहली पोस्ट अच्छी है। मैं शायद कुछ दस्तावेज या अन्य संसाधनों के लिए एक लिंक जोड़कर इसे बढ़ा दूंगा जो बताता है कि आपका उत्तर एक अच्छा समाधान क्यों है –

1

यदि फ़ाइल में स्थान है तो क्या होगा? FileInfo("file").Length 2 के बराबर है।
लेकिन मुझे लगता है कि फ़ाइल भी खाली है (रिक्त स्थान (या लाइन ब्रेक) को छोड़कर कोई सामग्री नहीं है)।

मैंने इस तरह कुछ उपयोग किया, लेकिन क्या किसी के पास बेहतर विचार है?
किसी की मदद कर सकता है।

string file = "file.csv"; 
var fi = new FileInfo(file); 
if (fi.Length == 0 || 
    (fi.Length < 100000 
    && !File.ReadAllLines(file) 
     .Where(l => !String.IsNullOrEmpty(l.Trim())).Any())) 
{ 
    //empty file 
} 
+2

'IENumerable.ToList()। गणना == 0' के बजाय आप' !nnumerable.Any() ' । पूरी सूची को पढ़ने से बचें। –

+0

हाँ यकीन है, धन्यवाद @ जेरेमीबर्ट्रैंड –

संबंधित मुद्दे