是否可以解除從c#程序中從互聯網上下載的文件的阻止? 瀏覽互聯網我瞭解到,信息是以包含當前區域信息(值3來自互聯網並被解釋爲阻止的)的(NTFS)文件的替代流寫入的。從.net 4中解除阻止文件4 c#
是否有管理可能性來清除或更改文件的區域信息(解除阻止)或是否存在管理複製功能來複制沒有區域信息的文件? 如果沒有,我怎樣才能用PInvoke但不包括外部程序集(我不允許在當前項目中這樣做)。
是否可以解除從c#程序中從互聯網上下載的文件的阻止? 瀏覽互聯網我瞭解到,信息是以包含當前區域信息(值3來自互聯網並被解釋爲阻止的)的(NTFS)文件的替代流寫入的。從.net 4中解除阻止文件4 c#
是否有管理可能性來清除或更改文件的區域信息(解除阻止)或是否存在管理複製功能來複制沒有區域信息的文件? 如果沒有,我怎樣才能用PInvoke但不包括外部程序集(我不允許在當前項目中這樣做)。
它存儲在:Zone.Identifier
流(more < c:\theapp.exe:Zone.Identifier
)您需要使用本機IO例程來操縱它們,這裏是managed wrapper。
雖然這可能暫時有效,但它是一個實現細節。正如@citizenmatt所述,[持久區域標識符對象](https://msdn.microsoft.com/en-us/library/ms537029(v = vs.85).aspx)是負責創建這些對象的位。因此,MS可隨時通過Windows更新或操作系統版本更改數據的存儲方式/位置。 – 2015-07-27 22:59:50
根據你輸入我做了下面的代碼:
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)和斯文給我方向。
UPDATE 我已經發布的代碼here的反饋是否會工作在生產環境中可靠。如果有人想使用它,請在那裏查看。
這樣的更新應作爲編輯發佈到您的問題。 – 2015-07-27 22:56:37
來管理此標識的正式的辦法是與PersistentZoneIdentifier COM對象:http://msdn.microsoft.com/en-us/library/ms537029(v=vs.85).aspx
@Sven:感謝:我想,我有完全是寫在我的問題。我的英語很糟糕嗎?但是,無論如何...... :) – HCL 2011-06-16 15:49:33
不,不過,顯然我的閱讀技巧是。 :)在我的防守中,這是在午夜之後。 Fwiw,您將不得不使用PInvoke,因爲.Net System.IO類不支持備用數據流。 – Sven 2011-06-16 15:50:56
查看http://stackoverflow.com/questions/604960/ntfs-alternate-data-streams-net – stuartd 2011-06-16 15:55:26