Мені цікаво подивитися, чи це викликає рефлекси WTF. У мене є процес, який створює та згодом запускає PDF-документ із консольного додатка. Однак я мав справу з недоліком, коли, якщо користувач повинен запустити процес кілька разів, генеруючи один і той же файл, не закриваючи попередньо створений файл, додаток кине виняток і загине. Це було досить частою справою, оскільки назви файлів базуються на номерах продажів.
Замість того, щоб вийти з ладу таким непривабливим чином, я вирішив покластися на автоматичне збільшення версії файлів:
private static string WriteFileToDisk(byte[] data, string fileName, int version = 0)
{
try
{
var versionExtension = version > 0 ? $"_{version:000}" : string.Empty;
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{fileName}{versionExtension}.pdf");
using (var writer = new FileStream(filePath, FileMode.Create))
{
writer.Write(data, 0, data.Length);
}
return filePath;
}
catch (IOException)
{
return WriteFileToDisk(data, fileName, ++version);
}
}
Можливо, в catch
блоці може бути приділено ще трохи уваги, щоб переконатися, що я вловлюю правильні IOException (s). Я, ймовірно, також очистить сховище додатків при запуску, оскільки ці файли в будь-якому випадку призначені тимчасовими.
Я усвідомлюю, що це виходить за рамки питання ОП про просто перевірити, чи файл використовується, але це справді була проблема, яку я шукав, щоб вирішити, коли приїхав сюди, так що, можливо, це стане в нагоді комусь іншому.