2011-08-04 29 views
7

雖然我確定該文件存在,但我得到一個驚喜FileNotFoundExceptionIO.FileNotFoundException但文件應該存在

我只是想將日誌文件(IO.FileInfo)作爲附件添加到電子郵件中,因此我試圖檢查每個文件的長度以檢測它們是否必須添加/壓縮。 這工作正常,如果這些文件已經存在。 但是,如果我在這次運行中創建了它們,當我嘗試檢查長度時,出現以上異常。奇怪的是,我可以寫入這些「不存在」的文件(實際上FileInfo.Exists返回false)沒有問題之前一行。

下面是一些代碼...

創建的一類名爲Log構造函數中的一個文件:

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 

我可以寫入到文件中不會有問題:

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

我得到異常後的一行LogFile.Length

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

Me.Log是一個名爲Log的自定義日誌記錄類對象,它擁有對FileInfo對象的引用。

這是LogWriteInfoLogFileIO.FileInfo -onject:

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很簡單。從來沒有聽說過這個函數,奇怪的是,當我不刷新文件時,我得到一個FileNotFoundException。

Me.Log.LogFile.Refresh() 
+1

D是映射驅動器還是物理驅動器? – kleinohad

+0

這是什麼類型的應用程序 - Windows服務? ASP.NET? – Yahia

+0

'D'是一個物理驅動器,這個代碼既不能在Win2008服務器上運行,也不能在我的開發電腦上運行(Win XP)。兩者都有這種物理驅動器。這將是一個Windows服務,但到目前爲止測試的目的,它是一個只有一個開始按鈕的WinForm應用程序。 –

回答

6

嘗試FileInfo.Exists之前調用FileInfo.Refresh,或FileInfo.Length - 這些特性可以被緩存,所以刷新會得到最新的值。

+0

在FileInfo.Exists(其中我創建文件)上,FileInfo.Length不會發生異常,但在'Length'之前的'Refresh'確實可以避免異常,但是爲什麼?非常感謝你 :) –

相關問題