Как узнать, используется ли папка файла другим процессом? - PullRequest
1 голос
/ 27 июня 2011

Я знаю, что уже есть десятки вопросов о "файле, используемом другим процессом".Но у всех них есть проблема попытки прочитать файл или записать в файл, который уже используется другим процессом.Я просто хочу проверить, используется ли файл другим процессом (никаких действий ввода-вывода после этого).Я не нашел ответа в другом месте.Итак, как я могу узнать, используется ли файл или папка другим процессом в C #?

Ответы [ 2 ]

4 голосов
/ 27 июня 2011

Как вы описываете в вопросе, единственный способ - сначала попытаться открыть файл, чтобы увидеть, не используется ли он другим процессом.

Вы можете использовать этот метод, который я реализовал некоторое время назад, идея в том, что если файл существует, попробуйте открыть файл как открытая запись, и, если он не удался, файл может быть использован другим процессом:

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);
    }
}
2 голосов
/ 27 июня 2011

Этот пост может помочь:

Как проверить блокировку файла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...