无法访问文件 - WebClient.DownloadFile

时间:2012-04-29 03:28:08

标签: c# file download webclient access-denied

所以我已经多次寻找答案了,并且干涉了权限但没有用,但是这段代码仍然不允许我将文件下载到指定的路径。

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。

4 个答案:

答案 0 :(得分:11)

您好我在本地尝试了上述代码并得到了相同的错误“访问被拒绝”:

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")

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

您可以使用下面的代码查看您是否对文件夹具有写入权限,如果未在下载前使用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;
    }