52 / 50 / 26
Регистрация: 15.06.2009
Сообщений: 390
1

Определить, что файл уже занят процессом

14.09.2017, 12:21. Показов 3202. Ответов 3

Author24 — интернет-сервис помощи студентам
Всем привет. Стоит задача проверить, занят ли файл другим процессом, прежде чем начать с этим файлом работу. Везде рекомендуют использовать для этого проверку try...catch.

Вопрос в том, что исключение IOException генерируется не только в случае занятости файла. А мне хотелось бы получить точную информацию о том, что файл уже занят процессом, и по-разному обрабатывать штатную ситуацию (занятость файла) и нештатную (все остальные причины исключения IOException).

Вижу, что объект IOException в случае занятости файла возвращает HResult, равный «FFFF FFFF 8007 0020». Я не силён в HResult'ах, потому вопрос: могу ли я быть уверен, что данный HResult обозначает именно занятость файла, а все иные срабатывания IOException будут иметь иной HResult?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2017, 12:21
Ответы с готовыми решениями:

Файл занят другим процессом
Запускаю программу в несколько потоков. В итоге получаю данную ошибку. Прочитал, что для...

Ошибка: Файл занят другим процессом
Доброго времени суток. Пишу программку которая должна перемещать изображения с разрешением...

Как удалить файл который занят другим процессом?
Все Здрасте! Уважаемые такая проблема, облазил весь интернет не нашел подходящего решения. Пишу...

Синхронизация файлов в двух папках. При работе с большими файлами возникает ошибка "Файл занят другим процессом"
Доброго времени суток. У меня такой вопрос. Пишу программу для синхронизации данных в двух...

3
Администратор
Эксперт .NET
16988 / 13348 / 5208
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
14.09.2017, 13:33 2
Лучший ответ Сообщение было отмечено Skorp24 как решение

Решение

Цитата Сообщение от Skorp24 Посмотреть сообщение
могу ли я быть уверен, что данный HResult обозначает именно занятость файла, а все иные срабатывания IOException будут иметь иной HResult?
Да. HRESULT = 0x80070020 соответствует win32 ошибке 0x00000020 (ERROR_SHARING_VIOLATION).
1
52 / 50 / 26
Регистрация: 15.06.2009
Сообщений: 390
14.09.2017, 15:51  [ТС] 3
OwenGlendower, спасибо!
0
52 / 50 / 26
Регистрация: 15.06.2009
Сообщений: 390
09.11.2017, 10:42  [ТС] 4
Вот так проверяю, соответствует ли исключение вышеупомянутым условиям:

C#
1
2
3
4
5
6
static bool ErrorIsSharingViolation(Exception exception)
{
    const int ERROR_SHARING_VIOLATION = unchecked((int)0xFFFFFFFF80070020);
    return exception.GetType() == new IOException().GetType() && Marshal.GetHRForException(exception) ==
        ERROR_SHARING_VIOLATION;
}
0
09.11.2017, 10:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2017, 10:42
Помогаю со студенческими работами здесь

При повторной попытке подключиться к базе сообщается, что файл уже занят
добрый день, я подключаю базу данных к проекту, получаю данные из базы, заношу их в DataSet,...

Файл занят другим процессом
Вопрос довольно-таки банальный, но я никак не могу его решить. Дело обстоит так: у меня в цикле при...

Файл занят другим процессом
Здравствуйте. Проблема стара как мир, но разобраться с ней у меня не получается. Моя программа в...

Файл занят другим процессом
the process cannot access the file... because it is being used by another process Пытаюсь удалить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru