如何从上一个日期到当前日期下载FTP文件

时间:2011-04-05 05:25:27

标签: c#

我可以从C#下载ftp文件,但它会下载当前的日期文件。我需要将文件从上一个日期下载到当前日期。例如,我的文件是:

xys04-02-2011.zip xys04-03-2011.zip xys04-04-2011.zip

我在控制台应用程序中尝试以下代码:

string defaultLocalFolder_MCX = "C:\\";

FastZip fzMCX = new FastZip();

fzMCX.ExtractZip(
    defaultLocalFolder_MCX + "\\xys03-31-2011.zip", 
    defaultLocalFolder_MCX, "");

FtpWebRequest requestFileDownload = 
    (FtpWebRequest)WebRequest.Create("ftp://localhost/Source/" + fileName);
requestFileDownload.Credentials = new NetworkCredential("test", "test");
requestFileDownload.Method = WebRequestMethods.Ftp.DownloadFile;

FtpWebResponse responseFileDownload = 
    (FtpWebResponse)requestFileDownload.GetResponse();

Stream responseStream = responseFileDownload.GetResponseStream();
FileStream writeStream = new FileStream(localPath + fileName, FileMode.Create);

int Length = 2048;
Byte[] buffer = new Byte[Length];
int bytesRead = responseStream.Read(buffer, 0, Length);

while (bytesRead > 0)
{
    writeStream.Write(buffer, 0, bytesRead);
    bytesRead = responseStream.Read(buffer, 0, Length);
}

responseStream.Close();
writeStream.Close();

requestFileDownload = null;
responseFileDownload = null;

1 个答案:

答案 0 :(得分:4)

嗯,听起来你需要按日期参数化你的方法,然后从那个日期生成文件名:

string formattedDate = date.ToString("MM-dd-yyyy", CultureInfo.InvariantCulture);
fzMCX.ExtractZip(
    defaultLocalFolder_MCX + "\\xys" + formattedDate + ".zip", 
    defaultLocalFolder_MCX, "");

然后只需在循环中调用该方法:

for (DateTime date = startDate; date <= dateTime.endDate; date = date.AddDays(1))
{
    FetchZipFile(date);
}

(我只是猜到了这个名字,因为它不清楚zip文件提取是怎么回事。)

代码风格方面的一些建议:

  • 对所有可支配资源使用using语句,而不是手动关闭它们。包括WebResponses
  • 在变量命名中保持一致;通常局部变量在camelCase而不是PascalCase
  • 中命名
  • 考虑将“将一个流复制到另一个”代码提取到辅助方法 - 或者如果您使用的是.NET 4,请使用Stream.CopyTo
  • 您不需要在方法结束时将局部变量设置为null;它没有意义,只是在源代码中产生噪音。