Почему бы не попробовать сначала проверить атрибуты FileAttributes?
Попробуйте что-то вроде этого:
//If File is readonly
if ( (file.Attribute & System.FileAttributes.ReadOnly) == System.FileAttributes.ReadOnly )
//Don't delete.
Также попробуйте использовать .OpenWrite (). Если вы можете открыть файл для записи, он не доступен и в данный момент не используется. Вы можете открыть файл для записи, только если он в данный момент не открыт. Я не рекомендую это, но это может помочь вам.
FileStream fs = File.OpenWrite(file);
fs.Close();
return false;
Вы также можете использовать метод проверки FileLock. Примерно так:
protected virtual bool IsFileLocked(FileInfo file)
{
try
{
using (file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
return false;
}
}
catch (IOException)
{
return true;
}
}
Вы также можете проверить FileIOPermission.Write. Это позволяет увидеть, доступен ли файл для записи (и может ли он быть удален).
fileIOPerm = New FileIOPermission(FileIOPermissionAccess.Write, FileSpec);
fileIOPerm.Demand();
Что касается вопроса № 3 в исходном сообщении ... Вы всегда можете переместить файлы во временную папку, используя File.Copy (path1, path2, true). Возможно, вы захотите использовать временную папку и написать лучшую логику для манипулирования файлами.
Если вы решили использовать временную папку или временные файлы / промежуточные файлы, то вы бы также исправили свой вопрос №2. Попробуйте сначала переместить файлы.