【问题标题】:Unable to access file - WebClient.DownloadFile无法访问文件 - WebClient.DownloadFile
【发布时间】:2012-04-29 03:28:07
【问题描述】:

所以我已经多次寻找答案,并且插手许可的东西无济于事,但是这段代码仍然不允许我将文件下载到指定的路径。

WebClient client = new WebClient();
client.DownLoadFile("http://dl.dropbox.com/u/(My account)/Installer.jar", @"c:\Games\Name\libs");
client.DownLoadFile("http://dl.dropbox.com/u/(My account)/Name.zip", @"c:\Games\Name");

总是给我:“访问路径 'c:\Games\Name\libs' 被拒绝。”

另请注意,使用 Windows XP SP3。

【问题讨论】:

  • 请不要在标题前加上“C# -”之类的前缀。这就是标签的用途。

标签: c# file download webclient access-denied


【解决方案1】:

你好,我在本地尝试了上面的代码,得到了同样的错误“访问被拒绝”:

WebClient myWebClient = new WebClient();
    myWebClient.DownloadFile("http://localhost:1929/2.png", @"C:\Z\)

尝试在目录末尾指定文件名,运行时本地保存没问题:

WebClient myWebClient = new WebClient();
    myWebClient.DownloadFile("http://localhost:1929/2.png", @"C:\Z\FILENAME.jpg")

【讨论】:

  • “@”有什么作用?
  • @Fandango68 这是一个逐字字符串文字。您可以使用它,这样您就不必在文件路径中转义反斜杠。
【解决方案2】:

应用程序可能没有写入该文件夹的权限。如果这是客户端应用程序,请尝试以管理员身份运行它。否则,请将 'c:\Games\Name\libs' 的权限更改为所有人的完全控制权。

【讨论】:

  • 正确,我只是不知道如何让它提示许可或任何东西,我猜。另外我是我电脑上的管理员,所以这很奇怪。在此之上。我似乎无法禁用文件夹上的“只读”属性.. O_o
  • 右键点击文件夹,点击属性。寻找安全标签。
  • Win XP SP3 没有该选项卡...而且我不希望使用我的程序的人必须通过属性来执行此操作。 >_
  • 要是我坐在你的电脑前就好了。
【解决方案3】:

如果访问被拒绝,请尝试以管理员身份运行。

如果它不起作用,请导航到文件夹C:\Games\Name\libs,右键单击它并转到“属性”。 选择“安全”选项卡,在顶部列表中选择将运行您的程序的用户组。 (尝试使用Users (YourName-PC\Users))。 选中它,点击列表底部的编辑,然后在底部列表中选择Allow下的Full control

【讨论】:

  • 这不是一个适用于组织中任何人的动态解决方案。
  • @Fandango68 是的,但如果这是您的设置并且系统管理员不会为您提供对工作至关重要的文件系统访问权限,那么您遇到的问题要比 OP 中的问题大得多。
【解决方案4】:

您可以使用下面的代码查看您是否有文件夹的写入权限,如果没有在下载之前使用 setaccesscontrol 设置失败规则

 public static bool HaveWritePermissionsForFolder(string path)
    {
        var rules = Directory.GetAccessControl(Path.GetDirectoryName(Path.GetDirectoryName(path))).GetAccessRules(true, true, typeof(SecurityIdentifier));

        bool allowwrite = false;
        bool denywrite = false;
        foreach (FileSystemAccessRule rule in rules)
        {
            if (rule.AccessControlType == AccessControlType.Deny &&
                (rule.FileSystemRights & FileSystemRights.WriteData) == FileSystemRights.WriteData &&
                (groups.Contains(rule.IdentityReference) || rule.IdentityReference.Value == sidCurrentUser)
                )
            {
                denywrite = true;
            }
            if (rule.AccessControlType == AccessControlType.Allow &&
                (rule.FileSystemRights & FileSystemRights.WriteData) == FileSystemRights.WriteData &&
                (groups.Contains(rule.IdentityReference) || rule.IdentityReference.Value == sidCurrentUser)
                )
            {
                allowwrite = true;
            }
        }


        if (allowwrite && !denywrite)
            return true;

        return false;
    }

【讨论】:

  • 好的,所以我需要设置访问权限。我知道。但我不知道怎么做。
  • 我没有尝试过目录安全而不是文件,我想我会的。但是我应该为 @"MYDOMAIN\MyAccount" 写什么?
  • 它是 Web 应用程序还是 Windows 应用程序?
猜你喜欢
  • 2012-10-10
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多