File.Copy未经授权的访问C#

时间:2017-05-08 22:31:15

标签: c# file access access-violation unauthorized

我开始遇到File.Copy的问题。这适用于我的数据创建脚本,管理复制数千个文件没有问题。尝试在我的代码中稍后创建临时文件时出现问题。

我在下面添加了代码示例,但该代码示例无法正常工作。我尝试了许多不同的方法试图解决这个问题无济于事。我正在做的是将在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'.

感谢任何帮助,提前谢谢!

解决方案:

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 个答案:

答案 0 :(得分:4)

您在致电File.Create之前使用的是File.Copy,我认为这是问题,它会留下一个开放的流。

删除File.Create电话可能会解决问题。如果不是,您可以获取返回的值(这是一个流)并在尝试复制之前将其关闭。

  

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

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