В этот вопрос я искал простое решение для разблокировки файлов.
Благодаря всем комментариям и ответам я нашел простое решение с помощью PInvoking DeleteFile
.
Это работает, но поскольку я никогда не использовал файловые операции через PInvoke (Win32), я не знать, есть ли какие-то подводные камни или есть другой метод вызова DeleteFile
для удаления альтернативного потока файла.
Я также не знаю, нужно ли мне заключить вызов в попробуйте / поймать или, если достаточно, просто посмотреть на логический результат. В моих тестах не возникало никаких исключений, но я не знаю, что произойдет в реальном мире.
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" с именем файла). Я исправил это сейчас, извините.