In this question I have searched for a simple solution to unblock files.
Thanks to all the comments and answer, I have found a simple solution by PInvoking DeleteFile
.
It works, but because I've never used file-operations through PInvoke (Win32), I don't know if there are some pitfalls or if there is another method of calling DeleteFile
to delete the alternate stream of a file.
What I also don't know is if I have to wrap the call in a try/catch or if it is enough just to look the at the boolean result. In my tests, no exceptions were raised, but I don't know what will happen in the real world.
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");
}
}
Does this code look reliable?
Update
I had posted an incomplete method (the unblock method didn't concatenate the "Zone.Identifier" literal to the file name). I have corrected this now, sorry.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…