2017-05-08 4 views
1

J'ai commencé à rencontrer un problème avec File.Copy. Cela fonctionne très bien pour mon script de création de données, en réussissant à dupliquer des milliers de fichiers sans problème. Mon problème se produit lors de la tentative de créer des fichiers temporaires plus tard dans mon code.File.Copy Accès non autorisé C#

J'ai ajouté l'exemple de code ci-dessous qui ne fonctionne pas correctement. J'ai essayé de nombreuses façons d'essayer de résoudre cela en vain. Ce que je fais est la copie de certains fichiers de données utilisateur créés dans un répertoire sur le lecteur C dans un dossier temporaire dans ce dossier de données utilisateur.

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); 
} 

Erreur de sortie

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

Toute aide est appréciée, merci à l'avance!

SOLUTION:

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(); 

Je ne sais pas comment bien formaté c'est, mais cela fonctionne. Remplacez File.Copy par le code ci-dessus.

+1

-vous écrire ces fichiers vous-même, et puis essayer plus tard de les copier? Il est possible que vous ne fermiez pas une poignée de fichier quelque part. Assurez-vous d'utiliser les instructions 'using' ou appelez' .Close() 'à chaque fois que vous écrivez un fichier. –

+2

Copie possible de [C# UnauthorizedAccessException dans File.Copy] (http://stackoverflow.com/questions/18554108/c-sharp -unauthorizedaccessexception-in-file-copy) – krillgar

+2

Je demande pourquoi vous créez un nouveau fichier (File.Create) et ensuite copiez un fichier existant par-dessus (File.Copy). –

Répondre

4

Vous utilisez File.Create juste avant d'appeler File.Copy, je pense que c'est le problème, il laisse un flux ouvert. Peut-être supprimer l'appel File.Create va résoudre le problème. Sinon, vous pouvez obtenir la valeur retournée (qui est un flux) et la fermer avant d'essayer de copier.

Le fichier est ouvert avec un accès en lecture/écriture et doit être fermé avant de pouvoir être ouvert par une autre application.

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

+0

J'appelle généralement '.Close()' à la fin ... 'File.Create (tempPath +" \\ "+ tempFile) .Close();' –

+0

Merci bro! J'ai juste utilisé le flux de fichier au lieu de copier et cela a fonctionné comme un charme !!!! –