2011-08-23 23 views

cevap

15
public static void CopyFileExactly(string copyFromPath, string copyToPath) 
{ 
    var origin = new FileInfo(copyFromPath); 

    origin.CopyTo(copyToPath, true); 

    var destination = new FileInfo(copyToPath); 
    destination.CreationTime = origin.CreationTime; 
    destination.LastWriteTime = origin.LastWriteTime; 
    destination.LastAccessTime = origin.LastAccessTime; 
} 
+1

hedef dosya zaten var olduğunda doğru değerleri almak için destination' 'üzerinde' Refresh' çağrı (veya daha oluşturun) zorunda olmaz mı? –

+0

@Paul Ruane: Haklısın - Cevabını buna göre güncelledim, teşekkürler. –

2

Okumak gerekir İhtiyacınız olan değerleri, istediğiniz değişiklikleri yapın ve sonra önceki değerleri geri yükleyin. FileInfo'un özelliklerini kullanarak. yönetici ayrıcalıkları olmadan

11

yürütme kopyalanan salt okunur dosyalar üzerinde damgaları ayarlamak çalışırken varolan salt okunur dosyaların üzerine çalışırken veya (UnauthorizedAccessException) bir istisna durumu Roy'un cevap.

Aşağıdaki çözüm, Roy'in yanıtını temel alır, ancak salt okunur dosyaların üzerine yazılmasını ve yalnızca yönetici ayrıcalığı olmaksızın yürütme sırasında dosyanın salt okunur özniteliğini korurken yalnızca kopyalanan salt okunur dosyalardaki zaman damgalarını değiştirmesini sağlar.

public static void CopyFileExactly(string copyFromPath, string copyToPath) 
{ 
    if (File.Exists(copyToPath)) 
    { 
     var target = new FileInfo(copyToPath); 
     if (target.IsReadOnly) 
      target.IsReadOnly = false; 
    } 

    var origin = new FileInfo(copyFromPath); 
    origin.CopyTo(copyToPath, true); 

    var destination = new FileInfo(copyToPath); 
    if (destination.IsReadOnly) 
    { 
     destination.IsReadOnly = false; 
     destination.CreationTime = origin.CreationTime; 
     destination.LastWriteTime = origin.LastWriteTime; 
     destination.LastAccessTime = origin.LastAccessTime; 
     destination.IsReadOnly = true; 
    } 
    else 
    { 
     destination.CreationTime = origin.CreationTime; 
     destination.LastWriteTime = origin.LastWriteTime; 
     destination.LastAccessTime = origin.LastAccessTime; 
    } 
} 
İlgili konular