使用FtpWebRequest从远程服务器下载的文件内容显示在记事本的一行中

时间:2018-03-25 22:16:50

标签: .net powershell ftp ftpwebrequest

从远程服务器复制文件并使用PowerShell保存在本地计算机上。但是当我在记事本中打开该文件时从远程服务器复制字段后,它没有以正确的格式打开(对齐)。但是,如果我手动使用FTP命令进行复制,则在记事本中对齐是正确的。

请找到我的PowerShell脚本:

$File = "D:\copiedfile.txt"
$ftp = "ftp://remote_machine_name//tmp/text.txt"
$ftprequest = [System.Net.FtpWebRequest]::Create($ftp)
$ftprequest.UseBinary = $true

"ftp url: $ftp"
$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftp)
"Downloading $File..."
$webclient.DownloadFile($uri, $File)

使用PowerShell脚本(未正确对齐)复制文件后,请查找附带的屏幕截图。

enter image description here

请在手动使用FTP复制文件后找到附带的屏幕截图(正确对齐)。

enter image description here

由于跨平台而导致此对齐问题。将文件从HP-UX复制到Windows。不确定,如何解决这个问题。

当我手动通过FTP复制文件(命令行)时,其传输模式为ASCII。但我不确定如何在我的powershell脚本中设置ASCII的传输模式。

1 个答案:

答案 0 :(得分:1)

Windows记事本仅支持Windows EOL。你的文件很可能是* nix EOL。

您需要使用ascii / text模式,而不是二进制,以便FtpWebRequest可以将文件转换为Windows EOL。

$ftprequest.UseBinary = $False

虽然请注意,在创建FtpWebRequest时,您永远不会真正使用它。

完整代码如下:

$url = "ftp://remote_machine_name//tmp/text.txt"
$ftprequest = [System.Net.FtpWebRequest]::Create($url)
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
$ftprequest.UseBinary = $false

$ftpresponse = $ftprequest.GetResponse()
$responsestream = $ftpresponse.GetResponseStream()

$localPath = "D:\copiedfile.txt"
$targetfile = New-Object IO.FileStream($localPath, [IO.FileMode]::Create)
$responsestream.CopyTo($targetfile);
$responsestream.Close()
$targetfile.Close()

(并删除所有WebClient代码)

在.NET 4中添加了

Stream.CopyTo。如果需要使用旧版本的.NET,则需要在循环中复制流内容,如Changing FTP from binary to ascii in PowerShell script using WebClient中所示。

它与命令行ftp一起正常工作,因为它默认为ascii / text模式。