Ответ 1
Он хранится в потоке :Zone.Identifier
(more < c:\theapp.exe:Zone.Identifier
), вам нужно использовать собственные процедуры ввода-вывода для управления ими, вот управляемая обертка.
Есть ли возможность разблокировать файл, загружаемый из Интернета из программы С#. Серфинг в Интернете Я узнал, что информация написана в альтернативном потоке файла (NTFS), который содержит текущую информацию о зоне (значение 3 из Интернета и интерпретируется как заблокированное).
Есть ли управляемая возможность либо очистить, либо изменить информацию о зоне (разблокировать) файла или есть ли управляемая функция копирования, которая копирует файлы без информации о зоне? Если нет, как я могу это сделать с PInvoke, но без включения внешней сборки (мне не разрешено делать это в текущем проекте).
Он хранится в потоке :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");
}
}
Спасибо Стюарту Данкельду, Alex K (+1) и Свену, чтобы показать мне направление.
UPDATE Я отправил код здесь для обратной связи, если он будет работать надежно в производственной среде. Если кто-то захочет его использовать, проверьте там.
Официальным способом управления этим идентификатором является объект COM PersistentZoneIdentifier: http://msdn.microsoft.com/en-us/library/ms537029(v=vs.85).aspx