34

ac# プログラム内からインターネットからダウンロードしたファイルのブロックを解除する可能性はありますか? インターネットをサーフィンしていると、現在のゾーン情報を含む (NTFS) ファイルの代替ストリームに情報が書き込まれていることがわかりました (値 3 はインターネットからのもので、ブロックされていると解釈されます)。

ファイルのゾーン情報を消去または変更 (ブロック解除) する管理された可能性はありますか? または、ゾーン情報なしでファイルをコピーする管理されたコピー機能はありますか? そうでない場合、外部アセンブリを含めずに PInvoke を使用するにはどうすればよいですか (現在のプロジェクトではこれを行うことは許可されていません)。

4

3 に答える 3

40

あなたの入力に基づいて、次のコードを実行しました。

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

Stuart Dunkeld、Alex K(+1)、Sven に方向性を示してくれてありがとう。

更新実稼働環境で確実に動作するかどうかのフィードバックを得るために 、コードをここに投稿しました。使いたい人はそちらでチェックしてみてください。

于 2011-06-16T16:33:12.490 に答える
20

:Zone.Identifierこれはストリームに保存され( more < c:\theapp.exe:Zone.Identifier)、ネイティブIOルーチンを使用して操作する必要があります。これがマネージラッパーです。

于 2011-06-16T15:58:48.377 に答える
6

この識別子を管理する公式の方法は、PersistentZoneIdentifier COM オブジェクトを使用することです: http://msdn.microsoft.com/en-us/library/ms537029(v=vs.85).aspx

于 2012-07-19T09:06:47.560 に答える