Проверьте это, написав простую консольную программу, которая открывает файл и ждет:
static void Main(string args[])
{
using (FileStream f = File.Open("c:\\software\\code.txt", FileMode.Open, FileAccess.Read, FileShare.None))
{
Console.Write("File is open. Press Enter when done.");
Console.ReadLine();
}
}
Запустите эту программу из командной строки (или другого экземпляра Visual Studio), а затем запустите вашу программу. Таким образом, вы можете поиграть с разными значениями FileMode и FileShare, чтобы убедиться, что ваша программа корректно реагирует во всех случаях.
И, нет, вам не нужно проверять, открыт ли файл первым. Ваш код должен выдать исключение, если файл уже открыт. Так что все, что вам нужно сделать, это обработать это исключение.