Desbloquear archivo desde.net 4 c#
.net-4.0 pinvoke (3)
¿Existe la posibilidad de desbloquear un archivo que se descarga desde Internet desde el programa ac #? Navegando por Internet he aprendido que la información está escrita en una secuencia alternativa de un archivo (NTFS) que contiene la información de la zona actual (el valor 3 proviene de Internet y se interpreta como bloqueado).
¿Existe una posibilidad gestionada de borrar o cambiar la información de la zona (desbloqueo) de un archivo o existe una función de copia administrada que copia los archivos sin la información de la zona? Si no, ¿cómo puedo hacerlo con PInvoke, pero sin incluir un ensamblaje extranjero (no estoy autorizado a hacer esto en un proyecto actual).
En base a su entrada, he hecho el siguiente código:
public class FileUnblocker {
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool DeleteFile(string name);
public bool Unblock(string fileName) {
return DeleteFile(fileName + ":Zone.Identifier");
}
}
Gracias a Stuart Dunkeld, Alex K (+1) y Sven para mostrarme la dirección.
ACTUALIZACIÓN He publicado el código here para obtener comentarios si funcionaría de manera confiable en el entorno de producción. Si alguien quiere usarlo, échale un vistazo.
La forma oficial de administrar este identificador es con el objeto COM PersistentZoneIdentifier: http://msdn.microsoft.com/en-us/library/ms537029(v=vs.85).aspx
Se almacena en la :Zone.Identifier
( more < c:/theapp.exe:Zone.Identifier
) necesita usar las rutinas IO nativas para manipularlas, aquí hay una envoltura administrada .