この質問では、ファイルのブロックを解除する簡単な解決策を探しました。すべてのコメントと回答のおかげで、 PInvoking による簡単な解決策を見つけましたDeleteFile
。
動作しますが、PInvoke (Win32) を介したファイル操作を使用したことがないため、落とし穴があるかどうか、またはDeleteFile
ファイルの代替ストリームを削除するための別の呼び出し方法があるかどうかはわかりません。
また、呼び出しを try/catch でラップする必要があるかどうか、またはブール値の結果を見るだけで十分かどうかもわかりません。私のテストでは例外は発生しませんでしたが、現実の世界で何が起こるかはわかりません。
public class FileUnblocker {
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteFile(string name );
public bool Unblock(string fileName) {
return DeleteFile(fileName+ ":Zone.Identifier");
}
}
このコードは信頼できるように見えますか?
更新
不完全なメソッドを投稿しました (ブロック解除メソッドは、「Zone.Identifier」リテラルをファイル名に連結しませんでした)。今訂正しました、すみません。