В этот вопрос Я искал простое решение для разблокировки файлов.
Благодаря всем комментариям и ответам я нашел простое решение с помощью PInvoking DeleteFile
.
Это работает, но, поскольку я никогда не использовал файловые операции через PInvoke (Win32), я не знаю, есть ли какие-то подводные камни или есть другой метод вызова DeleteFile
для удаления альтернативного потока файл.
Чего я также не знаю, так это того, нужно ли мне обернуть вызов в try / catch или достаточно просто посмотреть на логический результат. В моих тестах не было сделано никаких исключений, но я не знаю, что произойдет в реальном мире.
public class FileUnblocker {
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteFile(string name );
public bool Unblock(string fileName) {
return DeleteFile(fileName+ ":Zone.Identifier");
}
}
Этот код выглядит надежным?
Обновление
Я опубликовал неполный метод (метод разблокирования не объединял литерал «Zone.Identifier» с именем файла). Я исправил это сейчас, извините.