34 votes

Débloquer un fichier à partir de .net 4 c#

Est-il possible de débloquer un fichier téléchargé sur internet à partir d'un programme c#. En surfant sur Internet, j'ai appris que les informations sont écrites dans un flux alternatif d'un fichier (NTFS) qui contient les informations de la zone actuelle (la valeur 3 provient d'Internet et est interprétée comme étant bloquée).

Existe-t-il une possibilité gérée d'effacer ou de modifier les informations de zone (déblocage) d'un fichier ou existe-t-il une fonction de copie gérée qui copie les fichiers sans les informations de zone ? Si ce n'est pas le cas, comment puis-je faire avec PInvoke mais sans inclure un assemblage étranger (je ne suis pas autorisé à le faire dans un projet en cours).

42voto

Chris Valentine Points 15990

Sur la base de vos commentaires, j'ai créé le code suivant :

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");
    }
}

Merci à Stuart Dunkeld, Alex K(+1) et Sven de m'avoir montré la direction.

MISE À JOUR J'ai posté le code aquí pour savoir s'il fonctionnera de manière fiable dans un environnement de production. Si quelqu'un veut l'utiliser, il peut le faire ici.

21voto

Alex K. Points 67805

Il est stocké dans la base de données :Zone.Identifier flux ( more < c:\theapp.exe:Zone.Identifier ), vous devez utiliser les routines IO natives pour les manipuler. wrapper géré .

6voto

citizenmatt Points 3031

La manière officielle de gérer cet identifiant est l'objet COM PersistentZoneIdentifier : http://msdn.microsoft.com/en-us/library/ms537029(v=vs.85).aspx

0voto

D. Kermott Points 1044

Si vous souhaitez simplement débloquer des fichiers, utilisez une commande powershell :

dir -r | unblock-files

changez de répertoire pour atteindre le dossier contenant les fichiers et exécutez cette commande. Le paramètre -r permet de lister les fichiers dans tous les sous-dossiers.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X