For this particular case, the answer is easy enough...

There is a race condition between `FileExists` and `OpenFile`: what happens if the file is removed?  

The only sane way to deal with this particular case is to skip `FileExists`:

<!-- language: lang-cs -->

    contents = OpenFile(file);
    if (!contents) // open failed
        DefaultAction();
    else (SomeTest(contents))
        DoSomething(contents);

This neatly solves this problem *and* makes the code cleaner.

In general: 
*Try to rethink the problem and devise another solution which avoids the issue entirely.*