2015-11-12 14 views
11
aşağıdaki kod parçası ile garip hatalar görüyorum

:File.Copy (SourceFileName, destFileName, üzerine yaz) bazı OS üzerinde çalışmaz

File.Copy(oldPath, targetPath,true); 
File.SetAttributes(targetPath, FileAttributes.Normal); 

Bir dosya başka bir yere taşınacak vardır ve ben eksikliği nedeniyle Kaynak yolunda hemen yaz, dosyayı kopyala ve hedef dosya için erişim haklarını ayarla. Sistemimde (Windows 7 SP1) bu iyi çalışıyor.

Ancak (bildiğim gibi) herhangi bir Windows 10 makinedeki programı) (mesaj

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not find file 'C:\ProgramData\...\BlankDb.sdf'. 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.IO.File.SetAttributes(String path, FileAttributes fileAttributes) 

Bu kod File.Copy geçti rağmen bana söyler ile File.SetAttributes de çöküyor satır, dosya henüz başarıyla kopyalanmadı. File.Copy() artık eşzamanlı olarak çalışmıyor mu veya bu konuda farklı işletim sistemlerinde başka bir şey değişti mi?

Açıkçası, çok şaşırdım. İlk başta, zamanlama sorunlarını düşündüm ve Kopyala çağrılarını yeni bir Konuya sarmayı denedim, okunduğumda File.Copy() başarıyla kopyalanmadan veya bir hataya girmeden önce geri dönmeyecek.

+1

"Copy" öğesinden sonra 'File.Exists (targetPath)' özelliği nedir? – spender

+11

Gerçekten çok garip. Ancak, temel problemi çözmeniz gerekecek, c: \ programdata * düzgün bir şekilde yapılandırılmış bir makinede * asla yazılabilir. Pek çok programcı, dizini erişilebilir kılan bir cr * ppy yükleyici tarafından hasar gören makinelere sahiptir. Yaptığınız aynı hatayı yapan bir programcı tarafından yazıldı. Dizinde sakar bir isim var. Soğuk sert gerçek şu ki bir veritabanı saklamak için doğru yer asla, ** appdata kullanmanız gerekir **. –

+0

Windows 10 makinesinde bir virüs tarayıcısı var mı? – CodeCaster

cevap

0

Bu kodu deneyebilirsiniz. (Pls, sizinkileri değiştirir)

static void Main(string[] args) 
    { 
     var oldDir = new DirectoryInfo("D:\\Personal\\Projects\\Desktop\\StackSolutions\\ConsoleApp1\\ConsoleApp1\\OldFilePath\\funy.jpg"); 
     var newDir = new DirectoryInfo("D:\\Personal\\Projects\\Desktop\\StackSolutions\\ConsoleApp1\\ConsoleApp1\\NewFilePath\\funy1.jpg"); 

     var oldPath = oldDir.FullName; 
     var targetPath = newDir.FullName; 

     File.Copy(oldPath, targetPath); 
     File.SetAttributes(targetPath, FileAttributes.Normal); 
    } 
+0

Dahili bir isim isminiz olmalı. targetPath içinde – Dreammind

İlgili konular