2016-08-09 15 views
-1

Ich frage mich, ob jemand anderes ein ähnliches Problem hat.File.Copy wirft UnauthorizedAccessException

Ich habe eine einfache Dateikopie Code in meiner Anwendung, die wie unten vereinfacht werden kann (und mein Benutzer habe ich VS2013 geöffnet, um den Code zu debuggen hat die volle Kontrolle über die Quell - und Zielordnerhierarchie - das war nicht so aus irgendeinem Grund habe ich versucht, VS im Admin-Modus ausgeführt wird, die nicht funktioniert hat, dann habe ich manuell Voll Kontrolle an den Benutzer angelegt und sowieso der Fehler beschwert sich über den Quellordner)

// sourcefile was thought to be @"C:\tfs\Dev\Source\some-module\bin\Debug\mybinary.dll"; 
// retrieved through an environment variable, but was pointing to the folder instead of the file inside 
Directory.CreateDirectory(myfolder); 
File.Copy(sourcefile, Path.Combine(myfolder, Path.GetFileName(sourcefile)), true); 

Dieser Code glücklich, bis ich gearbeitet habe es heute auf meinem lokalen Rechner versucht (und funktioniert immer noch auf meiner Testbed-Maschine). Aber aus irgendeinem Grund begann er den Fehler zu werfen unter:

System.UnauthorizedAccessException: Access to the path 'C:\tfs\Dev\Source\some-module\bin\Debug' is denied. 
Result StackTrace: 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost) 
    at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite) 

Denken kann es sich um eine Datei-Lock-Problem sein, ich neu gestartet und versucht, es wieder von neuem, aber scheiterte.

Der Ordner für die Quelle hat schreibgeschütztes Attribut und denke, dass dies ein Problem sein kann (was seltsam ist), ich habe versucht, es zu deaktivieren, kann aber nicht. Dann habe ich den Ordner aus dem tfs-Arbeitsbereich in einen anderen Ordner (unter c: \ users \ my-user ..) verschoben und kann das schreibgeschützte Attribut immer noch nicht entfernen (es scheint zu funktionieren, aber die erneute Überprüfung zeigt das gleiche Attribut auf dem Datei). Ich habe sogar hektisch versucht, die schreibgeschützten Ordner aller Elternordner zu löschen, und dann aufgegeben, weil es in Ader ist. Und darf in keinem Zusammenhang mit dem ursprünglichen Problem stehen.

Ich überprüft ähnlich wie Fragen und Gedanken und Optionen ausgehen.

Win7, .net 4.5.2, VS2013 sind einige Konfigurationen.

weitere Experimente, aktualisieren Ich versuchte Directory.CreateDirectory auf dem Quellverzeichnis mit Sicherheitsregeln mit voller Berechtigung des aktuellen Benutzers verwendet wird, ändert nichts. Warum sollte es sich beschweren, dass das Quelldateiverzeichnis mit beginnt?

+5

bedeutet, dass der aktuelle Benutzer nicht berechtigt ist, in dieses Verzeichnis zu schreiben. Setzen Sie zuerst die Berechtigung für das Benutzerkonto, auf dem Sie die Anwendung ausführen. –

+1

Vorschläge: a) Check-Datei existiert nicht am Ziel; b) Sleep eine Sekunde und versuchen Sie es erneut, da AV möglicherweise die Datei scannt und vorübergehend blockiert –

+0

Niranjan, ich bereits erwähnen im ersten Absatz über die vollständige Kontrolle für den Benutzer. Jorge, gute Idee über den AV, ich werde es überprüfen! – MattAPiroglu

Antwort

0

Hmm. Es ist wieder passiert. Fehler an einem anderen Ort.

Der vereinfachte Code, den ich in der Frage niederlegte, zeigte das tatsächliche nicht. Ich verwendete eine Umgebungsvariable für den Namen der Quelldatei und stellte fest, dass sie auf einen Ordner und nicht auf eine Datei zeigte.

Ich denke, das Problem hier ist Microsofts UnauthorizedAccess ist nicht intuitiv genug zu verstehen, dass Sie tatsächlich versucht, ein Verzeichnis anstelle einer Datei zu kopieren, und Sie fangen an, Ihren Schwanz als Ergebnis zu jagen. Wie auch immer, hier ist ein Fall, der jemand anderem helfen kann. Vergessen Sie nicht zu überprüfen, ob es sich um ein Verzeichnis oder eine Datei handelt, die Sie kopieren.

0

Kann es sein, dass die Datei blockiert ist? Wenn es aus dem Internet heruntergeladen wird, wird Windows es blockieren. Dann müssen Sie zu den Eigenschaften der Datei gehen, und unten finden Sie ein Kontrollkästchen, wo Sie es entsperren können.

Blocked file

+0

Danke für die Antwort, aber ich habe bereits darauf hingewiesen, wo ich in meinem Update schief gelaufen bin. Sehr guter Punkt, übrigens. – MattAPiroglu

Verwandte Themen