我试图使用C#和ftpwebrequest从ftp服务器下载文件.我可以使用BinaryReader获取字节,但是当我尝试使用br.ReadBytes(int)读取流时,我得到一个BinaryReader不支持搜索操作的错误.
有谁知道如何最好地读取字节,以便我可以将它们写入文件?
这是完整的方法:
public void DownloadFile(String fileName)
{
Logger.Info("starting to download file: " + fileName);
try
{
var downloadFileRequest = (FtpWebRequest)WebRequest.Create(FtpServer + "//" + fileName);
downloadFileRequest.Credentials = new NetworkCredential(FtpUsername,FtpPassword);
downloadFileRequest.Method = WebRequestMethods.Ftp.DownloadFile;
downloadFileRequest.UseBinary = true;
ServicePoint sp = downloadFileRequest.ServicePoint;
sp.ConnectionLimit = 2;
Logger.Info("getting ftp response for download file for " + fileName);
try
{
var downloadResponse = (FtpWebResponse)downloadFileRequest.GetResponse();
Logger.Info("getting ftp response stream for " + fileName);
try
{
Stream downloadStream = downloadResponse.GetResponseStream();
Logger.Info("File Download status: {0}", downloadResponse.StatusDescription.Trim());
Logger.Info("getting binary reader …Run Code Online (Sandbox Code Playgroud) 我从ftp服务器下载文件并将其保存到Path.GetTempPath()中定义的目录; 但是,我收到以下错误:无法找到路径的一部分.
我已经确认返回的路径是正确的:C:\ Users\[username]\AppData\Local\Temp.
SYSTEM,Administrators和[username]都可以完全控制该目录.我认为临时目录的意思是它可以保存给任何人/每个人保存,但为了以防万一,我也给了NETWORK SERVICE修改权限.(我假设这是ASP.NET Dev服务器使用的用户名,但我不确定.)
我在Vista上使用VS 08.
这是我的代码:
FtpWebRequest downloadRequest = (FtpWebRequest)WebRequest.Create(
ConfigurationManager.AppSettings["FTPServer"] + "//" + fileName);
downloadRequest.Credentials = new NetworkCredential(
ConfigurationManager.AppSettings["FTPUsername"],
ConfigurationManager.AppSettings["FTPPassword"]);
downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse downloadResponse =
(FtpWebResponse)downloadRequest.GetResponse();
try
{
Stream downloadStream = downloadResponse.GetResponseStream();
if (downloadStream != null)
{
logger.Info("File Download status: {0}",
downloadResponse.StatusDescription);
StreamReader downloadReader = new StreamReader(downloadStream);
try
{
if (downloadReader != null)
{
StreamWriter downloadWriter =
new StreamWriter(Path.GetTempPath());
downloadWriter.AutoFlush = true;
downloadWriter.Write(downloadReader.ReadToEnd());
}
}
finally
{
if (downloadReader != null)
{
downloadReader.Close();
} …Run Code Online (Sandbox Code Playgroud)