Разблокировать файл из within.net 4 c#

есть ли возможность разблокировать файл, загруженный из интернета из программы на C#. Серфинг в Интернете я узнал, что информация записывается в альтернативном потоке файла (NTFS), который содержит текущую информацию о зоне (значение 3 из интернета и интерпретируется как заблокированное).

есть ли управляемая возможность очистить или изменить информацию о зоне (разблокировать) файла или есть функция управляемого копирования, которая копирует файлы без информации о зоне? Если нет, как я могу сделать с PInvoke, но без включения иностранной сборки (мне не разрешено делать это в текущем проекте).

3 ответов


он хранится в :Zone.Identifier поток (more < c:\theapp.exe:Zone.Identifier) вам нужно использовать собственные процедуры ввода-вывода, чтобы манипулировать ими, вот управляемую оболочку.


на основе вашего ввода я сделал следующий код:

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

благодаря Стюарту Данкельд, Алекс к(+1) и Свена, чтобы показать мне направление.

обновление Я опубликовал код здесь для обратной связи, если она будет работать надежны в рабочей среде. Если кто-то хочет использовать его, проверьте там.


официальным способом управления этим идентификатором является COM-объект PersistentZoneIdentifier:http://msdn.microsoft.com/en-us/library/ms537029 (v=против 85).aspx