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