2011-08-04 12 views
7

मुझे आश्चर्यजनक FileNotFoundException मिल रहा है हालांकि मुझे यकीन है कि फ़ाइल मौजूद है।IO.FileNotFoundException लेकिन फ़ाइल मौजूद होनी चाहिए

मैं बस एक ईमेल के अनुलग्नक के रूप में लॉगफाइल (IO.FileInfo) जोड़ना चाहता था, इसलिए मैंने यह पता लगाने के लिए प्रत्येक फ़ाइल की लंबाई जांचने की कोशिश की कि क्या उन्हें जोड़ा/ज़िप किया जाना चाहिए। यह ठीक काम करता है अगर ये फ़ाइलें पहले से मौजूद हैं। लेकिन अगर मैंने उन्हें इस दौड़ में बनाया है, तो मैं लंबाई की जांच करने का प्रयास करते समय अपवाद से ऊपर हूं। यह विचित्र रूप से पर्याप्त है कि मैं इन "मौजूदा नहीं" फ़ाइलों में लिख सकता हूं (वास्तव में FileInfo.Existsfalse देता है) बिना किसी समस्या के।

Me.Log.WriteInfo("BlahBlahBlah...", False) 
:

Me.LogFile = New IO.FileInfo(infoLogPath) 
If Not LogFile.Exists() Then 
    'tried to use `Using` on the Stream but that doesn't change anything' 
    Using stream = Me.LogFile.Create() 
     'close and dispose implicitely 
    End Using 
End If 

मैं एक समस्या के बिना फ़ाइल में लिख सकते हैं:

यहाँ कुछ कोड ...

एक वर्ग के निर्माता Log नामित में फ़ाइलों में से एक बनाना है

LogFile.Length पर अपवाद प्राप्त करने के बाद एक पंक्ति:

If Me.Log.LogFile.Length <> 0 Then 
    files.Add(Me.Log.LogFile) 
End If 

Me.LogLog नामक कस्टम लॉगिंग-क्लास ऑब्जेक्ट है जो FileInfo ऑब्जेक्ट का संदर्भ रखता है।

Public Sub WriteInfo(ByVal message As String, ByVal finishLog As Boolean) 
    Try 
     Using w As IO.StreamWriter = Me.LogFile.AppendText 
      If Me.WithTimestamp Then 
       w.WriteLine(Date.Now.ToString(Globalization.CultureInfo.InvariantCulture) & ": " & message) 
      Else 
       w.WriteLine(message) 
      End If 
      If finishLog Then w.WriteLine("__________________________") 
      w.Flush() 
      w.Close() 
     End Using 
    Catch writeLogException As Exception 
     Try 
      WriteError(writeLogException, True) 
     Catch innerEx As Exception 
      'ignore 
     End Try 
    End Try 
End Sub 

असल @ShellShocks solutionRefresh साथ आसान था:

इस वर्ग Log में WriteInfo है, LogFileIO.FileInfo -onject है। इस फ़ंक्शन के बारे में कभी नहीं सुना, अजीब है कि जब मैं फ़ाइल रीफ्रेश नहीं करता हूं तो मुझे FileNotFoundException मिलता है।

Me.Log.LogFile.Refresh() 
+1

क्या डी मैप ड्राइव या भौतिक ड्राइव है? – kleinohad

+0

यह किस प्रकार का ऐप है - विंडोज सेवा? एएसपी.नेट? – Yahia

+0

'डी' एक भौतिक ड्राइव है, यह कोड न तो Win2008-server पर काम करता है और न ही मेरे विकास पीसी (विन XP) पर। दोनों में यह भौतिक ड्राइव है। यह एक विंडोज़ सेवा होगी लेकिन अब तक परीक्षण उद्देश्यों के लिए यह केवल एक स्टार्ट-बटन के साथ एक WinForm- ऐप है। –

उत्तर

6

FileInfo.Exists से पहले FileInfo.Refresh कॉल करके देखें, या FileInfo.Length - इन गुणों कैश की जा सकती है, तो ताज़ा नवीनतम मूल्य मिल जाएगा।

+0

अपवाद फ़ाइलइन्फो.इक्सिस्ट्स पर नहीं होगा (जहां मैं फ़ाइल बनाउंगा) लेकिन FileInfo.Length पर, लेकिन 'लंबाई' से पहले 'ताज़ा करें' वास्तव में अपवाद से बचता है, लेकिन क्यों? आपका बहुत बहुत धन्यवाद :) –

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

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