文件名中的 Powershell webclient 点
Powershell webclient dot in Filename
我对 powershell 中的 .Net webclient 对象有疑问。
如果我想下载像 https://example.ch/15.01.2015 something.docx
这样的文件,由于文件名中有多个 .
,所以它不起作用。
Powershell webclient trailing dot in URL bug中描述了这样的问题,但不同之处在于:文件夹中有 .
。
我尝试了那里的代码,但它也不起作用。我的代码是:
$source = @"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Net;
public class FixedWebClient
{
public static System.Net.WebClient NewWebClient()
{
MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
foreach (string scheme in new[] { "http", "https" })
{
UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
if (parser != null)
{
int flagsValue = (int)flagsField.GetValue(parser);
// Clear the CanonicalizeAsFilePath attribute
if ((flagsValue & 0x1000000) != 0){
flagsField.SetValue(parser, flagsValue & ~0x1000000);
}
}
}
}
return new System.Net.WebClient();
}
}
"@
$file = "https://example.ch/15.01.2015 something.docx"
$target = "C:\temp.01.2015 something.docx"
#Remove-Typedata 'FixedWebClient'
Add-Type -TypeDefinition $source
$client = [FixedWebClient]::NewWebClient()
$client.UseDefaultCredentials=$true
$client.DownloadFile( $file , $target )
有谁知道,我该如何解决我的问题?
终于找到了解决办法。
我没有使用 System.Net.WebClient,而是使用 WebDav 下载文件。
Pswebdav library 很有用。
我对 powershell 中的 .Net webclient 对象有疑问。
如果我想下载像 https://example.ch/15.01.2015 something.docx
这样的文件,由于文件名中有多个 .
,所以它不起作用。
Powershell webclient trailing dot in URL bug中描述了这样的问题,但不同之处在于:文件夹中有 .
。
我尝试了那里的代码,但它也不起作用。我的代码是:
$source = @"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Net;
public class FixedWebClient
{
public static System.Net.WebClient NewWebClient()
{
MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
foreach (string scheme in new[] { "http", "https" })
{
UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
if (parser != null)
{
int flagsValue = (int)flagsField.GetValue(parser);
// Clear the CanonicalizeAsFilePath attribute
if ((flagsValue & 0x1000000) != 0){
flagsField.SetValue(parser, flagsValue & ~0x1000000);
}
}
}
}
return new System.Net.WebClient();
}
}
"@
$file = "https://example.ch/15.01.2015 something.docx"
$target = "C:\temp.01.2015 something.docx"
#Remove-Typedata 'FixedWebClient'
Add-Type -TypeDefinition $source
$client = [FixedWebClient]::NewWebClient()
$client.UseDefaultCredentials=$true
$client.DownloadFile( $file , $target )
有谁知道,我该如何解决我的问题?
终于找到了解决办法。 我没有使用 System.Net.WebClient,而是使用 WebDav 下载文件。 Pswebdav library 很有用。