Tôi nhận được một bất ngờ FileNotFoundException
mặc dù tôi chắc chắn rằng tệp tồn tại.IO.FileNotFoundException nhưng Tệp phải tồn tại
Tôi chỉ muốn thêm Logfiles (IO.FileInfo
) dưới dạng tệp đính kèm vào email, do đó tôi đã cố kiểm tra độ dài của mỗi tệp để phát hiện xem chúng có phải được thêm/nén hay không. Tính năng này hoạt động tốt nếu các tệp này đã tồn tại. Nhưng nếu tôi đã tạo chúng trong lần chạy này, tôi sẽ vượt qua ngoại lệ khi tôi cố gắng kiểm tra độ dài. Đó là kỳ lạ, đủ để tôi có thể viết vào những tập tin "không tồn tại" (thực tế FileInfo.Exists
trả về false
) mà không có một vấn đề trước khi một dòng.
Dưới đây là một số mã ...
Tạo một trong những tập tin trong constructor của một lớp có tên 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
tôi có thể viết vào tập tin mà không có một vấn đề:
Me.Log.WriteInfo("BlahBlahBlah...", False)
Một dòng sau khi tôi nhận được ngoại lệ trên LogFile.Length
:
If Me.Log.LogFile.Length <> 0 Then
files.Add(Me.Log.LogFile)
End If
Me.Log
là đối tượng lớp ghi nhật ký tùy chỉnh có tên Log
chứa tham chiếu đến đối tượng FileInfo
.
Đây là WriteInfo
trong lớp Log
, LogFile
là IO.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
Trên thực tế @ShellShocks solution với Refresh rất đơn giản. Không bao giờ nghe nói về chức năng này, lạ mà tôi nhận được một FileNotFoundException khi tôi không làm mới các tập tin.
Me.Log.LogFile.Refresh()
D có phải là ổ đĩa được ánh xạ hoặc ổ đĩa vật lý không? – kleinohad
loại ứng dụng này là gì - Dịch vụ Windows? ASP.NET? – Yahia
'D' là một ổ đĩa vật lý, mã này không hoạt động trên máy chủ Win2008 cũng như trên máy tính phát triển của tôi (Win XP). Cả hai đều có ổ đĩa vật lý này. Đây sẽ là một Windows-Service nhưng cho đến nay cho mục đích thử nghiệm đó là một WinForm-App chỉ với một nút khởi động. –