2013-08-16 15 views
20
System.IO.File.Exists(string path) 

हमेशा गलत होता है, भले ही फ़ाइल निर्दिष्ट पथ पर मौजूद हो। संभावित समाधान क्या हो सकता है?System.IO.File.Exists (स्ट्रिंग पथ) क्यों झूठी वापसी करता है?

+5

* फोन करने वाले निर्दिष्ट फ़ाइल को पढ़ने के लिए पर्याप्त अनुमतियाँ नहीं है, तो भी इसका अपवाद नहीं फेंक दिया जाता है और विधि परवाह किए बिना झूठे रिटर्न पथ के अस्तित्व की।* – V4Vendetta

+1

अपर्याप्त privilges के बारे में हो सकता है? व्यवस्थापक के रूप में exe चलाने की कोशिश करें। –

उत्तर

36

यह एक अनुमति समस्या भी हो सकती है। documentation से:

मौजूदा फ़ाइल मौजूद है या नहीं, यह निर्धारित करने का प्रयास करते समय कोई त्रुटि उत्पन्न होती है, तो मौजूदा विधि मौजूद होती है। यह उन परिस्थितियों में हो सकता है जो अमान्य वर्णों के साथ फ़ाइल नाम पास करने या बहुत से वर्ण, असफल या अनुपलब्ध डिस्क, या यदि कॉलर को फ़ाइल को पढ़ने की अनुमति नहीं है, तो अपवाद उठा सकते हैं।

क्या हो रहा है यह देखने का एक तरीका है कि फ़ाइल को पढ़ने की कोशिश करें (उदा। File.OpenRead के साथ)। मुझे आश्चर्य होगा अगर सफल होता है - लेकिन यदि यह विफल रहता है, तो अपवाद आपको अधिक जानकारी दे सकता है।

+5

File.OpenRead मेरे लिए काम किया। लेकिन फाइल.इक्सिस्ट अभी भी झूठी वापसी करता है .. मैं परेशान हूं ... – Vlad

+0

@Vlad Yep, वही। मैं एक प्रतिरूपण संदर्भ का उपयोग कर रहा था - मुझे नहीं पता कि उसके साथ क्या करना है या नहीं। लेकिन अगर यह इसे पढ़ सकता है - मैंने भी 'स्ट्रीम एस = फाइल.ऑपेन रीड (पथ) बनाया है;' और बाइट्स को बाइट सरणी में पढ़ने के लिए फ़ंक्शन का उपयोग किया है! - मुझे नहीं पता कि यह 'bool fileExists = file.Exists (पथ); '; के लिए' सत्य 'क्यों नहीं लौटा सकता है; असल में, यह संभव है कि फ़ाइल पथ में "बहुत सारे वर्ण" मेरे लिए हो, यह हो सकता है। – vapcguy

3

मैं इसके आसपास कैसे मिला Server.MapPath(fileName) का उपयोग कर रहा था क्योंकि यह कहीं और फ़ाइल ढूंढने की कोशिश कर रहा था।

System.IO.File.Exists(Server.MapPath(string path)) 
+0

क्या किसी को पता है कि यह .NET संस्करणों या कुछ के बीच एक अंतर है? इससे पहले कि ऐप को .NET 4.5 में अपग्रेड किया गया था, इससे पहले यह काम करता था। अब अचानक, यह एक मुद्दा है। –

+0

यह विंडोज अनुप्रयोगों में काम करेंगे नहीं, दुर्भाग्य से – MC9000

0

मैं इसे स्वयं भी अनुभव कर रहा था। मेरे मामले में, मैं फ़ाइल को हटा रहा था और इसे फिर से बना रहा था। प्रक्रिया है कि फ़ाइल को हटाने गया था में, मैं की पर

-3

उपयोग बाद में File.Exists का उपयोग कर \\ बजाय पहले WaitForExit() में जोड़ने के लिए भूल गया @।

@ "C: \ file.txt" उदाहरण के लिए -> "C: \\ file.txt" खिड़कियों में

5

छिपा फ़ाइल अंत कभी कभी भ्रम की स्थिति पैदा कर सकते हैं: आप अपनी फ़ाइल फ़ाइल का नाम है। txt जब इसे वास्तव में file.txt.txt नाम दिया जाता है क्योंकि पिछले 4 वर्ण ओएस द्वारा छिपाए गए हैं।

+0

फ़ाइल नाम में विस्तार से मेरे लिए काम किया .. thankuu :) – Deepzz

+0

* pinches नाक के पुल निकाला जा रहा है - ahhhhhhhhhhhh – rory

1

मेरे मामले में, फ़ाइल नाम में एक अलग "डैश" समस्या का कारण बनता है।

var f1 = "4-37R.pdf"; 
var f2 = "4‐37R.pdf"; 
var r = f1==f2?"same":"diff"; 
Console.Write(r); //diff 

पता चला है

var c1 = '-'; 
var c2 = '‐'; 
Console.WriteLine((int)c1); //45 
Console.WriteLine((int)c2); //8208 

का उपयोग एक ही '-' समस्या ठीक होती है।

1

यह मुझे थोड़ी देर के लिए रुक गया था, जबकि मैं स्थानीय रूप से एक सेवा डिबग कर रहा था, मैं अपने वर्कस्टेशन पर मैप किए गए सर्वर स्थान के विरुद्ध फ़ाइल.इक्सिस्ट ("यू: \ dir1") चला रहा था (यू :)। मैंने U: \ dir1 को "\\ serverPath \ dir1" और फ़ाइल में बदल दिया। एक्स्टिस्ट फिर सत्य लौट आए।

4

किसी भी उत्तर में उल्लिखित एक संभावना 'फाइल सिस्टम रीडायरेक्शन' विंडोज 8.1 पर आगे है।

उदाहरण के लिए, यदि आपका प्रोग्राम 32-बिट एप्लिकेशन है और आप 64-बिट विंडोज़ पर चल रहे हैं तो% windir% \ System32 तक पहुंचने का प्रयास% windir% \ SysWOW64 पर रीडायरेक्ट किया जाएगा। और यदि आप जिस फ़ाइल को एक्सेस करने का प्रयास कर रहे हैं वह% windir% \ SysWOW64 में मौजूद नहीं है तो System.IO.File.Exists (स्ट्रिंग पथ) झूठी वापसी करेगा।

Link to a nice article explaining this behavior

+0

बहुत बहुत शुक्रिया !!!!!!!!!!! मैं इस तरह फंस गया था, मुझे नहीं पता, कम से कम चार घंटे। –

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