2011-06-16 16 views
26

Internet'ten indirilen bir dosyanın engellemesinin bir C# programından kaldırılması olanağı var mı? İnternette gezinmek Bilginin, mevcut bölge bilgilerini içeren bir (NTFS) dosyanın alternatif bir akışında yazıldığını öğrendim (3. değer internet'ten geliyor ve engellenmiş olarak yorumlanıyor).Dosyayı engelini kaldırmak için .net 4 C#

Bir dosyanın bölge bilgilerini (engellemesini) temizlemek veya değiştirmek için yönetilen bir olasılık var mı, yoksa dosyaları bölge bilgisi olmadan kopyalayan yönetilen bir kopyalama işlevi var mı? Eğer değilse, PInvoke ile ancak yabancı bir meclis dahil etmeden nasıl yapabilirim (bunu mevcut bir projede yapmama izin verilmez).

+2

@Sven: Teşekkürler: Ben tam olarak bu soruma yazılmış olduğunu düşündük. İngilizcem çok kötü mü? Ama yine de teşekkürler ... :) – HCL

+0

Hayır, görünüşe göre okuma becerilerim var. :) Benim savunmamda, gece yarısından sonra burada. Fwiw, .Net System.IO sınıfları alternatif veri akışlarını desteklemediğinden, PInvoke kullanmanız gerekecek. – Sven

+0

Bkz. Http://stackoverflow.com/questions/604960/ntfs-alternate-data-streams-net – stuartd

cevap

15

:Zone.Identifier akışında (more < c:\theapp.exe:Zone.Identifier) saklanmak üzere yerel IO rutinlerini kullanmanız gerekir, burada bir managed wrapper.

+2

Bu şimdilik çalışabilir olsa da, bu uygulama bir ayrıntıdır. @citizenmatt tarafından belirtildiği gibi, [Kalıcı Bölge Tanımlayıcı nesnesi] (https://msdn.microsoft.com/en-us/library/ms537029 (v = vs.85) .aspx), bunları oluşturmaktan sorumludur. Bu şekilde MS, herhangi bir zamanda, Windows güncelleme veya işletim sistemi sürümü aracılığıyla, bu verilerin nasıl/nerede depolandığını değiştirebilir. –

28

verilerinize bağlı Aşağıdaki kodu yapmış: Stuart Dunkeld Alex K (1) ve Sven ile

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

Teşekkür bana yön göstermek için.

üretim ortamında güvenilir çalışacak eğer bir geri bildirim için kod here gönderdiniz GÜNCELLEME. Birisi kullanmak istiyorsa, orada kontrol edin.

+1

Bu gibi güncellemeler, sorunuza bir düzenleme olarak gönderilmelidir. –