2015-11-12 7 views
11

ich seltsame Fehler mit dem folgenden Code-Schnipsel sehe:File.Copy (source, Destfilename, überschreiben) funktioniert nicht auf einige OS

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

Eine Datei irgendwo anders bewegt werden muss, und weil mir fehlt Schreibe direkt in den Quellpfad, ich kopiere die Datei und setze Zugriffsrechte für die Zieldatei. Auf meinem System (Windows 7 SP1) funktioniert das einwandfrei.

jedoch auf (soweit ich weiß) jede Maschine 10 von Windows das Programm stürzt bei File.SetAttributes mit der Meldung

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) 

Das sagt mir, obwohl der Code die File.Copy bestanden hat() Zeile wurde die Datei noch nicht erfolgreich kopiert. Arbeitet File.Copy() in diesem Zusammenhang nicht mehr synchron oder hat sich irgendetwas anderes auf einem anderen Betriebssystem geändert?

Ehrlich gesagt bin ich ratlos. Zuerst dachte ich über Timing-Probleme und versuchte, den Kopieraufruf in einen neuen Thread zu verpacken, bis ich die Datei gelesen habe. Kopieren() wird sowieso nicht zurückkehren, bevor erfolgreich kopiert oder in einen Fehler ausgeführt wird.

+1

Was gibt 'File.Exists (targetPath)' nach der "Kopie" Ihnen? – spender

+11

Nun, in der Tat sehr seltsam. Aber Sie müssen das Kernproblem angehen, c: \ programdata ist * nie * schreibberechtigt auf einem richtig konfigurierten Rechner. Viele Programmierer haben Computer, die von einem cr * ppy-Installer beschädigt wurden, der das Verzeichnis zugänglich machte. Geschrieben von einem Programmierer, der genau den gleichen Fehler gemacht hat wie du. Das Verzeichnis hat einen plumpen Namen. Kaltes Faktum ist, dass es nie der richtige Ort ist, um eine Datenbank zu speichern, Sie ** müssen ** appdata verwenden. –

+0

Gibt es auf dem Windows 10-Computer einen Virenscanner? – CodeCaster

Antwort

0

Sie können diesen Code versuchen. (Bitte ändern Sie die Pfade zu Ihrem)

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

Sie müssen einen Namen mit ext haben. im Zielpfad – Dreammind

Verwandte Themen