【问题标题】:File.Copy Unauthorized access C#File.Copy 未经授权的访问 C#
【发布时间】:2017-05-08 22:31:15
【问题描述】:

我开始遇到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

【问题讨论】:

  • 您自己编写这些文件,然后尝试复制它们吗?您可能没有在某处关闭文件句柄。确保在编写文件时使用using 语句或调用.Close()
  • 我质疑您为什么要创建一个新文件 (File.Create),然后在 (File.Copy) 之后直接将现有文件复制到其顶部。

标签: c# file access-violation unauthorized


【解决方案1】:

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

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

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

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

【讨论】:

  • 我通常只在最后调用.Close()...File.Create(tempPath + "\\" + tempFile).Close();
  • 谢谢兄弟!我只是使用文件流而不是复制,它就像一个魅力!!!!
猜你喜欢
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 2016-08-12
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多