Как вы описываете в вопросе, единственный способ - сначала попытаться открыть файл, чтобы увидеть, не используется ли он другим процессом.
Вы можете использовать этот метод, который я реализовал некоторое время назад, идея в том, что если файл существует, попробуйте открыть файл как открытая запись, и, если он не удался, файл может быть использован другим процессом:
public static bool IsFileInUse(string fileFullPath, bool throwIfNotExists)
{
if (System.IO.File.Exists(fileFullPath))
{
try
{
//if this does not throw exception then the file is not use by another program
using (FileStream fileStream = File.OpenWrite(fileFullPath))
{
if (fileStream == null)
return true;
}
return false;
}
catch
{
return true;
}
}
else if (!throwIfNotExists)
{
return true;
}
else
{
throw new FileNotFoundException("Specified path is not exsists", fileFullPath);
}
}