C#执行文件时出现未经授权的访问异常。复制

C#执行文件时出现未经授权的访问异常。复制,c#,file,copy,C#,File,Copy,我正在尝试将文件从客户端复制到具有共享驱动器的服务器。当我这样做时,我得到了UnauthorizedAccessException,它说对我试图复制到的路径的访问被拒绝。这很奇怪,因为我拥有所有权限,并且以管理员身份登录。奇怪的是,当写入服务器上同一路径上的文本文件时,它会工作。像这样: FileStream fs = new FileStream(@"\\SIMON-VAIO\SimonShared\Users\Simon\Desktop\Files\Clients\clients.txt",

我正在尝试将文件从客户端复制到具有共享驱动器的服务器。当我这样做时,我得到了
UnauthorizedAccessException
,它说对我试图复制到的路径的访问被拒绝。这很奇怪,因为我拥有所有权限,并且以管理员身份登录。奇怪的是,当写入服务器上同一路径上的文本文件时,它会工作。像这样:

FileStream fs = new FileStream(@"\\SIMON-VAIO\SimonShared\Users\Simon\Desktop\Files\Clients\clients.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

        using (StreamReader sr = new StreamReader(fs))
        {
            while (sr.Peek() >= 0) //as long as there are characters to read
            {
                ListViewItem lvwItem = new ListViewItem();
                lvwItem.Text = sr.ReadLine();
                AddListViewItem(lvwItem);
            }
            sr.Close();
        }
但是在使用copy方法时,我得到了这个异常。以下是我如何复制的:

FileInfo file = new FileInfo(sourcePath);
            string newPath = targetPath + "\\" + file.Name;
            File.Copy(sourcePath, newPath, true);
因此,我输入了整个路径,其中包含源和目标的文件名和扩展名

我尝试过像“
File.SetAttributes(dest,FileAttributes.Normal);
”这样的东西,以及服务器上的所有东西,比如地图上的安全性等等

你知道怎么了吗?我非常感谢你的帮助


提前感谢

您可能对该文件有读/写权限,但对文件夹本身没有读/写权限。因此,这就是您无法在该位置创建新文件的原因之一


还请记住,如果您启用了UAC,应用程序将不会“继承”您的管理员权限,除非您明确地(以管理员身份运行)

该特定问题可能会由于以下问题而发生:

  • 对驱动器的访问无效
  • 对文件夹的访问无效
  • 对覆盖或移动文件的访问无效
根据路径位置,我会相信它是另一台计算机。您必须确保它满足执行任务所需的可访问性要求

您可以通过几种不同的方式完成此任务:

  • 编写测试以获得适当的提升权限
  • 尝试让您的程序模拟管理员或网络服务帐户
  • 您可以在尝试与权限交互之前查询权限
这是一些你可以做到这一点的方法

您甚至可以针对UAC进行测试:

WindowsIdenetity user = WindowsIdentity.GetCurrent();
WindowsPrincipal role = new WindowsPrincipal(user);

if (Environment.OSVersion.Platform == PlatformId.Win32NT) && (Environment.OSVersion.Version.Major > 6)
{
     if(!(String.NullOrEmpty(user.ToString())))
     {
          if(role.IsInRole(WindowsBuiltInRole.Administrator)
          {
              // Good
          }
     }
}
这将是一种实际验证您是否担任适当角色的方法;如果没有,那么您实际上可以编写一个
消息框
或其他方法来表示权限不足

您甚至可以查询目录:

string remotePath = @"\\SomeLocation";
bool IsAccess = false;

DirectoryInfo di = new DirectoryInfo(remotePath);
if(di.Exists)
{
    try
    {
        var acl = di.GetAccessControl();
        IsAccess= true;
    }
    catch(UnauthorizedAccessException ex)
    {
       if(ex.Message.Contains("read-only"))
       {
           IsAccess = true;
       }
       else
       {
           // No Access Fail, do something else.
       }
    }
}

正如你所看到的,在这种情况下,你有相当大的灵活性。希望这能对您有所帮助。

很抱歉,伙计们,问题是我第一次共享驱动器时忘记将权限更改为“完全控制”,而只有读取权限。这使得计算机除了通过共享网络进行读取之外,不可能做任何事情。我再次抱歉,是我的错!
我真的很感谢你的帮助,谢谢

听起来像是权限问题。您是否可以检查本地计算机上的文件夹权限?您是否在该计算机上执行
Admin
?错误是否与源位置有关?您有权访问该文件/文件夹吗?@DJKRAZE我已以管理员身份登录共享网络,并已将权限设置为完全权限。@贝洛吉,我从没想过!我明天会检查并更新答案,如果是这样的话!谢谢,我明天可以使用电脑时会试试这个,谢谢。我希望是这样,正如您所说,目标路径位于另一台计算机上,我通过共享网络以管理员身份登录该计算机。我想这只是为了检查一下。我已经找到了一些关于只读问题的解决方案,对于许多人来说这似乎是一个问题。类似于:“FileInfo FileInfo=newfileinfo(destinationFile);”fileInfo.IsReadOnly=false;'我将尝试类似的东西,明天也以您的方式测试调试,我将在这里写下结果。谢谢你的回答!没问题,希望有帮助。