Нужно првоерить открыт ли сейчас файл в других процессах.
Суть программы не позволяет открывать файлы, которые используются в других процессах. Еще нужно запретить открывать файлы, если он используется в моей программе.
Как можно это сделать?
Напрашивается решение, возвращающее true/false в зависимости от того, открыт файл в стороннем ПО или нет.
Хотелось бы сразу предостеречь от такого подхода: дело в том, что файл может быть и не открыт, но с ним (с файлом) могут быть намного более «интересные» проблемы (например, этого файла может банально не существовать).
В связи с этим вопрос требует более комплексного подхода: так, в примере ниже происходит попытка открытия файла на чтение, и, в случае возникновения ошибки, ее анализ.
Расширение для Exception (конечно, при необходимости легко преобразуется в функцию):
public static class ExceptionExtension
{
private const int ERROR_SHARING_VIOLATION = 32;
private const int ERROR_LOCK_VIOLATION = 33;
public static bool IsFileLocked(this Exception exception)
{
int errorCode = Marshal.GetHRForException(exception) & ((1 << 16) - 1);
return errorCode == ERROR_SHARING_VIOLATION || errorCode == ERROR_LOCK_VIOLATION;
}
}
Использование:
FileStream fs = null;
try
{
fs = System.IO.File.Open(filePath, FileMode.Open); // Пробуем открыть файл на чтение
// ...или сразу читаем содержимое (при необходимости предварительно проверяем файл на размер)
//byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
}
catch (Exception ex)
{
if (ex.IsFileLocked)
{
// Файл открыт в стороннем процессе
throw;
}
else
{
// Произошла иная ошибка доступа к файлу
throw;
}
}
finally
{
fs?.close();
}
// Файл не открыт в стороннем процессе
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В этом задании необходимо написать программу, объявит две переменные: первая переменная - переменная целочисленного (int) типа со значением...