我有Win服务,该服务必须通过URL下载所有zip文件(例如http://download.geonames.org/export/dump/ ),但是当我使用Directory.GetFiles方法或DirectoryInfo di = new DirectoryInfo(ConfigurationManager.AppSettings["GeoFullDataURLPath"])我收到错误消息:

不支持URI格式。

我该如何解决这个问题?

===============>>#1 票数:2

您必须创建一个WebRequest。 DirectoryInfo用于本地驱动器,并且SMB共享仅适用于我。 这应该可以解决问题: http : //www.csharp-examples.net/download-files/

===============>>#2 票数:2

您不能在URL上使用Directory.GetFiles

考虑以下示例:

 WebClient webClient = new WebClient();
 webClient.DownloadFile("http://download.geonames.org/export/dump/file.zip", "new-file.zip");

这将从上面的URL下载文件file.zip

通常出于安全原因,网络上的目录列表被阻止,

编辑:看到这个

===============>>#3 票数:1 已采纳

执行此任务的完整源代码为:

string
    storeLocation = "C:\\dump",
    fileName = "",
    baseURL = "http://download.geonames.org/export/dump/";

WebClient r = new WebClient();            
string content = r.DownloadString(baseURL);
foreach (Match m in Regex.Matches(content, "<a href=\\\"[^\\.]+\\.zip\">"))
{
    fileName = Regex.Match(m.Value, "\\w+\\.zip").Value;
    r.DownloadFile(baseURL + fileName, Path.Combine(storeLocation, fileName));
}

  ask by Alexey Z. translate from so

未解决问题?本站智能推荐:

1回复

C#使用WinForms应用程序测试WinService。 应用程序配置不会更改值

我一直在开发WinService应用程序,并使用WinForms应用程序测试方法和功能。 我有一个解决方案,并且两个应用程序都在同一个解决方案下。 应用程序逻辑和方法位于WinService项目的公共类和方法下,因此我可以分别测试方法。 WinService应用程序使用参考链接到W
1回复

WCF:Windows服务托管在Winforms应用程序中时找不到端点

我需要Windows服务才能对WinForms应用程序中托管的服务进行WCF调用。 不幸的是,当尝试呼叫时,Windows服务无法发现端点。 我尝试更改Windows服务的“登录”属性以允许与桌面进行交互,但是这没有帮助。 我在控制台应用程序中使用了完全相同的托管代码(与Win
1回复

ManagedInstallerClass.InstallHelper锁定WinService exe文件

我有以下(简化)安装WinService的代码: 我注意到在安装向导中调用它时,WinService的EXE文件被锁定,直到整个安装向导没有完成。 有什么办法可以避免这种锁定? 在InstallService完成后,如何“释放资源”? 我在这里发现了类似的问题。 GC.Colle
3回复

.NET WinService在交互式登录用户下启动程序

目前,在Windows启动时,已经在LocalService用户下启动了.NET WinService。 该服务使用Process.Start()启动另一个WinForms应用程序。 但是此解决方案中存在几个问题: 我们不等待交互式用户登录,并且应用程序崩溃,因为它尝试初始化D
6回复

如何注册Winservice?

如何在c#.net中注册Windows服务?
1回复

在Windows Service应用程序中获取已安装的AutoCAD版本

我正在编写Windows服务以生成CAD图纸,并且需要检测系统中安装了哪个版本。 在Windows Server环境中获取已安装的AutoCAD版本的最佳方法是什么? 我知道我可以从注册表中获取此信息,但是从哪个键获取呢? 所有AutoCAD版本都有特定的版本吗?
2回复

无法获取正在运行的应用程序的名称

我试图获取正在运行的应用程序的名称(mozila,Visual Studio等),但尝试下面的代码,但出现“拒绝访问”异常。 我不知道该怎么解决?
1回复

将配置文件值保留在内存中,以便可以在整个应用程序中使用

我有Windows服务,它会定期(例如每5分钟)调用一些wcf服务。 因此,每隔5分钟,当代码到达需要调用WCF服务的位置时,我需要从config中读取一些值。 我在WCF服务上有4种不同的操作,每5分钟从Windows服务调用一次,所有4种操作都试图从配置文件中读取不同的键。 我
1回复

如何通过C#中的Service应用程序运行GUI应用程序

我想通过C#中的服务应用程序运行GUI应用程序,因此我尝试使用System.Diagnostics.Process.Start()方法,如下所示: 问题在于记事本可以运行,但是没有UI,您可以在任务管理器中看到它,但没有显示记事本的GUI实例。 您还可以尝试使用ProcessSta
1回复

在运行时与WinForms应用通信

我有Windows服务,并且希望它能够与我的桌面应用程序通信。 桌面应用程序是WinForms应用程序。 该服务应该能够在后台以及在应用运行时与该应用进行通信。 使用服务中的命令启动应用程序是不可接受的。 Windows Service(或另一个WinForms应用程序)已经运行时,