私はファイルが存在すると確信していますが、驚くようなFileNotFoundException
を取得しています。IO.FileNotFoundExceptionが存在しますが、ファイルが存在する必要があります
ログファイル(IO.FileInfo
)を添付ファイルとして電子メールに追加するだけで、すべてのファイルの長さを確認して、追加/圧縮が必要かどうかを検出しようとしました。 これらのファイルが既に存在する場合、これはうまく動作します。 しかし、私はこの実行でそれらを作成した場合、私は長さをチェックしようとすると例外を超えて取得します。奇妙なことに、私はこれらの「存在しない」ファイル(実際にはFileInfo.Exists
がfalse
を返す)に1行前に問題なく書き込むことができます。ここで
は
が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)
を
例外が発生してから1行後LogFile.Length
:
If Me.Log.LogFile.Length <> 0 Then
files.Add(Me.Log.LogFile)
End If
Me.Log
は、FileInfo
オブジェクトへの参照を保持するLog
というカスタムロギングクラスオブジェクトです。
これはLogFile
はIO.FileInfo
-onjectで、クラスLog
でWriteInfo
です:Refreshと
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 solutionは簡単でした。ファイルを更新しないときにFileNotFoundExceptionが発生するという不思議なことに、この関数を聞いたことはありません。
Me.Log.LogFile.Refresh()
Dはドライブまたは物理ドライブにマップされていますか? – kleinohad
これはどのようなアプリですか?Windowsサービスですか? ASP.NET? – Yahia
'D'は物理ドライブです。このコードはWin2008サーバでも、開発用PC(Win XP)でも動作しません。どちらもこの物理的なドライブを持っています。これはWindowsサービスとなりますが、これまでのテスト目的では、スタートボタンのみを持つWinFormアプリケーションです。 –