C# 将文件从web下载到计算机上的文件夹时出现问题

C# 将文件从web下载到计算机上的文件夹时出现问题,c#,file-io,download,permission-denied,webclient-download,C#,File Io,Download,Permission Denied,Webclient Download,我正在编写一个程序,它基本上使用来自的国家的DAT文件来运行IP地址分析 但是,如果C:\ProgramData\IPChecker中的文件夹不在那里(第一次),我会创建它-没问题,这是可行的 但是,如果该文件不在该文件夹中(这不是我第一次运行该程序或按计划的时间间隔获取DAT文件的最新副本),我希望能够从web下载该文件并将其放入该文件夹中 我不能发布任何代码,因为编辑器不允许我发布,但它是一个简单的下载文件命令,URL和路径作为参数 其中this.DataFolder是我刚刚创建的文件夹的路

我正在编写一个程序,它基本上使用来自的国家的DAT文件来运行IP地址分析

但是,如果C:\ProgramData\IPChecker中的文件夹不在那里(第一次),我会创建它-没问题,这是可行的

但是,如果该文件不在该文件夹中(这不是我第一次运行该程序或按计划的时间间隔获取DAT文件的最新副本),我希望能够从web下载该文件并将其放入该文件夹中

我不能发布任何代码,因为编辑器不允许我发布,但它是一个简单的下载文件命令,URL和路径作为参数

其中this.DataFolder是我刚刚创建的文件夹的路径,或者我想将压缩文件复制到例如C:\ProgramData\IPChecker中

然后,我将解压该文件,以便它可以被使用-如果我得到那么远

我以为这两行代码可以满足我的要求

但是,我不断收到一个错误,说我没有足够的权限将文件移动到文件夹中

我已经手动创建了文件夹(我有管理员权限),更改了c:\根目录的路径,下载文件夹和我电脑上的各种其他文件夹,但无论我试图下载并复制到哪个文件夹,我似乎总是收到相同的权限拒绝错误

我已经尝试将整个异常粘贴到这个框中,但是如果我这样做,编辑器不会让我保存帖子。这只是一个“Message=对路径“C:\ProgramData\ProxyHunter”的访问被拒绝。“StackTrace from错误”位于System.IO.\uu error.WinIOError(Int32 errorCode,字符串maybeFullPath) 在System.IO.FileStream.Init(字符串路径、文件模式、文件访问权限、Int32权限、布尔用户权限、文件共享、Int32缓冲大小、文件选项选项、安全属性secAttrs、字符串msgPath、布尔bFromProxy、布尔useLongPath、布尔checkHost) 位于System.IO.FileStream..ctor(字符串路径、文件模式、文件访问) 位于System.Net.WebClient.DownloadFile(Uri地址,字符串文件名)”

任何人都能想到发生了什么,或者我需要做什么才能让WebClient.DownloadFile行正常工作,而不会抛出“权限拒绝”错误吗

我正在使用.NET4.5

此外,尽管例外情况表明我在VS2010(我确实创建了原始项目)中,但当我今天打开项目时,它是在VS2012中打开的。所以我不知道这是否与此有关


任何帮助都将不胜感激。谢谢

您正在尝试从网络共享运行程序吗?如果是这样,由于您的机器安全策略,程序可能会被限制写入本地驱动器。尝试将程序复制到本地磁盘并从那里运行

如果它在本地有效,那么我建议看看其他问题,比如

可以找到有关设置.Net安全策略的更多信息


干杯

好的,我已经修好了。基本上,我是一个nob,因为我复制的代码提供了一个文件夹路径作为WebClient.DownloadFile(url,path)的第二个参数,而不是一个文件路径

一旦我将路径更改为文件路径,而不仅仅是文件夹,文件就会正确下载到该位置


谢谢你的帮助

我猜运行您的web应用程序的帐户没有对所述文件夹的权限。您可以尝试授予此类权限。要检查这一点,请转到“C:\ProgramData\ProxyHunter文件夹”,打开“属性”窗口,安全->编辑->添加->高级->立即查找->选择“所有人”,然后单击“确定”并选择所有权限?然后重试测试。如果它有效-你知道原因。但删除对“每个人”授予的权限,这是安全漏洞。您需要向用于运行应用程序的确切用户授予权限。我确实尝试过向每个人授予对该文件夹的完全访问控制权(写入、执行、读取、完全访问,所有内容),但在我调试它或将其作为EXE运行时,它仍然会崩溃。同样的错误,权限被拒绝。事件日志查看器只显示C:\Windows\syswow64\KERNELBASE.dll中的错误。从web下载文件时,是否需要执行特殊操作?这是一个.gz文件,我想在使用之前先解压缩它。您好,我正在尝试使用webclient.DownloadFile(url,目录)将文件从URI下载到我的c:\ProgramData\ProxyHunter文件夹,因为我假设这是一个安全的地方,可以在Win7上使用读/写文件。我有其他运行的程序/服务,可以读/写该目录中自己的文件夹。但是,我以前从未尝试过将文件从web下载到文件夹,因此可能是它的权限。我认为这与您使用
WebClient.DownloadFile
无关,因为它没有任何特定的安全属性。您可以通过简单地更改程序以将随机数据写入文件来证明这一点。您能否确认您正在从
C:
驱动器上的某个位置运行程序?您的
ProgramData
目录也可能受到限制。看到这个,它似乎反映了与您相同的问题。是的,该程序在我自己的PC上。我刚刚授予每个人对它的完全访问权限(正如前面的人所建议的,Vitaliy,但这不起作用)没有网络共享。我的Win 7 64位PC上有一个VS项目,试图将一个文件下载到本地计算机C:\ProgramData\ProxyHunter folder。此外,我还创建了另一个程序,该程序作为windows服务运行,它创建、删除文件(日志文件)并将其附加到ProgramData中自己的文件夹中。这就是我认为所有与本地程序相关的代码都需要在win7中使用的地方,因为在win7中,以前人们可以到处放东西。我敢肯定,我个人授予每个人对该文件夹的完全访问权与你给我的那篇文章是一样的。我也是这么做的。谢谢分享你的修复。