Windows
C#

存在しないファイルでもFile.Existsがtrueを返すことがある

現象

File.Exists()を使って、リモートフォルダの削除済みファイルに対して存在チェックを行ったら存在すると言われてしまった。

環境

OS: Windows 7
.NET Framework: Ver 4
IDE: Visual Studio 2010

対策

ファイルが存在するかどうかの判断にFile.OpenRead()を使用するようにした。

bool FileExists(string filePath)
{
    if (File.Exists(filePath) == false)
    {
        return false;
    }

    // File.Exists()で存在するとなっても、実際は存在しないことがあるので再チェック
    try
    {
        using (FileStream fs = File.OpenRead(filePath)) { }
        return true;
    }
    catch (FileNotFoundException ex)
    {
        return false;
    }
}