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

.net 使用FtpWebRequest从远程服务器下载的文件内容在记事本中显示为一行,.net,powershell,ftp,ftpwebrequest,.net,Powershell,Ftp,Ftpwebrequest,我正在使用PowerShell从远程服务器复制文件并保存到本地计算机中。但当我在记事本中打开该文件时,从远程服务器复制了该文件后,它并没有以正确的格式打开(对齐)。但如果我使用FTP命令手动复制,它在记事本中的对齐方式是正确的 请查找我的PowerShell脚本: $File = "D:\copiedfile.txt" $ftp = "ftp://remote_machine_name//tmp/text.txt" $ftprequest = [System.Net.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脚本复制文件后查找附加的屏幕截图(未正确对齐)

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

由于跨平台,我遇到了这个对齐问题。我正在将文件从HP-UX复制到Windows。不确定,如何解决这个问题


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

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

您需要使用ascii/文本模式,而不是二进制模式,以便
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
code)

是在.NET4中添加的。如果需要使用较旧版本的.NET,则需要在循环中复制流内容,如中的示例所示



它可以在命令行
ftp
中正常工作,因为它默认为ascii/文本模式。

我尝试了
$ftprequest.UseBinary=$False
。但是我还是得到了一个文件,它在NotepadOK中对齐不正确,我明白了。请注意,当您创建
FtpWebRequest
时,您从未真正使用过它。请参阅我的更新答案。现在我收到此错误
方法调用失败,因为[System.Net.FtpDataStream]不包含方法名称“CopyTo”
CopyTo
已添加到.Net 4中。如果需要使用较旧版本的.NET,则需要在循环中复制流内容,如下例所示: