从.net 4 c#中解除阻止文件

zour9fqk  于 2023-03-20  发布在  .NET
关注(0)|答案(4)|浏览(134)

是否有可能从C#程序内部解除阻止从Internet下载的文件。在Internet上冲浪时我了解到,信息写入到包含当前区域信息的(NTFS)文件的备用流中(值3来自Internet,并被解释为已阻止)。
是否存在清除或更改文件的区域信息(解除阻止)的托管可能性,或者是否存在复制不带区域信息的文件的托管复制功能?如果没有,如何在不包括外部程序集的情况下使用PInvoke(不允许在当前项目中这样做)。

disho6za

disho6za1#

根据您的输入,我完成了以下代码:

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

感谢斯图尔特·邓克尔德、亚历克斯·K(+1)和斯文给我指明了方向。

更新我已经发布了代码here的反馈,如果它将工作可靠的生产环境。如果有人想使用它,检查那里。

zf9nrax1

zf9nrax12#

它存储在:Zone.Identifier流(more < c:\theapp.exe:Zone.Identifier)中,您需要使用本地IO例程来操作它们,这里是一个managed wrapper

kh212irz

kh212irz3#

管理此标识符的正式方法是使用PersistentZoneIdentifier COM对象:http://msdn.microsoft.com/en-us/library/ms537029(v=vs.85).aspx

qvtsj1bj

qvtsj1bj4#

如果您只想取消阻止文件,请使用powershell命令:

dir -r | unblock-files

将目录更改为包含文件的文件夹并运行该命令。参数-r用于列出所有子文件夹中的文件。

相关问题