2017-05-08 157 views
1

我开始遇到File.Copy的问题。这适用于我的数据创建脚本,管理重复数千个没有问题的文件。在我的代码中稍后尝试创建临时文件时发生问题。File.Copy未经授权的访问C#

我在下面添加了代码示例,但无法正常工作。我尝试了许多不同的方法来尝试解决这个无济于事。我正在做的是将C驱动器上的目录中创建的一些用户数据文件复制到该用户数据文件夹中的临时文件夹中。

代码

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

退出错误

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

任何帮助表示赞赏,谢谢提前!

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

不知道如何很好地格式化这个,但它的工作原理。用上面的代码替换File.Copy

+1

你自己写的这些文件,再后来尝试复制它们?有可能你没有关闭文件句柄。在任何时候写入文件时,务必使用'using'语句或调用'.Close()' –

+2

[File.Copy中的C#UnauthorizedAccessException]的可能重复(http://stackoverflow.com/questions/18554108/c-sharp -unauthorizedaccessexception-in-file-copy) – krillgar

+2

我问你为什么要创建一个新文件(File.Create),然后直接在文件顶部复制一个现有的文件(File.Copy)。 –

回答

4

您在拨打File.Copy之前正在使用File.Create,我认为这是问题所在,它是开放式的。

也许删除File.Create调用将解决该问题。如果没有,你可以得到返回值(这是一个流),并在尝试复制之前关闭它。

该文件以读/写访问权限打开,并且必须关闭才能被其他应用程序打开。

见备注https://msdn.microsoft.com/en-us/library/ms143361(v=vs.110).aspx

+0

我通常只是在最后调用'.Close()'...'File.Create(tempPath +“\\”+ tempFile).Close();' –

+0

感谢兄弟!我只是使用文件流而不是复制,它像一个魅力! –