2017-05-08 3 views
1

Ich habe begonnen, ein Problem mit File.Copy zu begegnen. Dies funktioniert gut für mein Skript zur Datenerstellung und verwaltet Tausende von Dateien ohne Probleme. Mein Problem tritt auf, wenn ich später versuche, temporäre Dateien in meinem Code zu erstellen.File.Copy Nicht autorisierter Zugriff C#

Ich habe das folgende Codebeispiel hinzugefügt, das nicht richtig funktioniert. Ich habe versucht, auf verschiedene Arten zu versuchen, dies ohne Erfolg zu lösen. Ich kopiere einige Benutzerdatendateien, die in einem Verzeichnis auf Laufwerk C erstellt wurden, in einen temporären Ordner in diesem Benutzerdatenordner.

-Code

foreach (string originalFile in OriginalDataFileNames) 
{ 
    string tempFile = originalFile; 
    TempDataFiles.Add(tempFile); 
    Console.WriteLine("GlobalDataCtrl: Original Data File: " + XWSDataDirectory + "\\" + tempFile); 
    Console.WriteLine("GlobalDataCtrl: Saved Temp Data File: " + tempPath + "\\" + tempFile); 
    File.Copy(XWSDataDirectory + "\\" + originalFile, tempPath + "\\" + tempFile); 
} 

Ausgangsfehler

The program '[6256] XtremeWrestlingSim.vshost.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'. 

Jede Hilfe, Dank im Voraus zu schätzen!

LÖSUNG:

FileStream outputFS = null; 
      FileStream inputFS = null; 
      outputFS = new FileStream(tempPath + "\\" + tempFile, FileMode.CreateNew, FileAccess.ReadWrite); 
      using (inputFS = new FileStream(XWSDataDirectory + "\\" + originalFile, FileMode.Open)) 
      { 
       inputFS.CopyTo(outputFS); 
      } 
      outputFS.Close(); 
      inputFS.Close(); 

Nicht sicher, wie schön formatiert das ist, aber es funktioniert. Ersetzen Sie File.Copy durch den obigen Code.

+1

schreiben Sie diese Dateien selbst, und dann später, sie zu kopieren versuchen? Es ist möglich, dass Sie nicht irgendwo einen Dateigriff schließen. Verwenden Sie 'using' Anweisungen oder rufen Sie' .Close() 'jedes Mal auf, wenn Sie eine Datei schreiben. –

+2

Mögliches Duplikat von [C# UnauthorizedAccessException in File.Copy] (http://stackoverflow.com/questions/18554108/c-sharp -unauthorizedaccessexception-in-file-copy) – krillgar

+2

Ich Frage, warum Sie eine neue Datei erstellen (File.Create) und kopieren Sie dann eine vorhandene Datei über den Anfang davon (File.Copy). –

Antwort

4

Sie verwenden File.Create kurz bevor Sie File.Copy anrufen, ich denke, das ist das Problem, es ist ein offener Stream verlassen.

Vielleicht den File.Create Anruf entfernt wird das Problem lösen. Wenn nicht, könnten Sie den zurückgegebenen Wert erhalten (was ein Stream ist) und ihn schließen, bevor Sie versuchen zu kopieren.

Die Datei wird mit Lese-/Schreibzugriff geöffnet und muss geschlossen werden, bevor sie von einer anderen Anwendung geöffnet werden kann.

siehe Bemerkungen https://msdn.microsoft.com/en-us/library/ms143361(v=vs.110).aspx

+0

Ich rufe normalerweise '.Close()' am Ende ... 'File.Create (tempPath +" \\ "+ tempFile) .Close();' –

+0

Danke bro! Ich habe nur den Dateistream anstelle der Kopie verwendet und es hat funktioniert wie ein Zauber !!!! –

Verwandte Themen