如何使用今天的日期作为文件名的一部分从FTP请求文件?

时间:2013-07-31 19:05:56

标签: vb.net

我们有一项服务,每天提供几个文件以便提取。每个文件都附有今天的日期以及创建文件时的小时,分​​钟,秒和毫秒标记。

我们的目标是下载给定日期的所有文件,无论时间戳如何。我设置了以下变量:

Dim remoteFile As String = "/datafeed/sdlookup-total-" & DateTime.Today.Year.ToString 
& "-" & DateTime.Today.Month.ToString("0#") & "-" & DateTime.Today.Day.ToString("0#") & 
".csv.zip"

当我运行控制台应用程序时,我收到一个找不到的HTTP 550文件,因为FTP上的文件都有一天之后的时间戳,例如。

sdlookup-total-2013-07-27_02_15_00_272.csv.zip

该模块如下:

Imports System.IO
Imports System.IO.Compression
Imports System.Net
Imports System.Net.WebClient

' This module when run will download the file specified and save it to the local path as defined.
Module Module1
Dim Today As Date = Now()
' Change the value of localFile to the desired local path and filename
 Dim localFile As String = "C:\ForeclosureFile\sdlookoup-total-" & Today.Year.ToString & "-" & 
 Today.Month.ToString("0#") & "-" & Today.Day.ToString("0#") & ".csv.zip"
' Change the value of remoteFile to the desired filename
 Dim remoteFile As String = "/datafeed/sdlookup-total-" & Today.Year.ToString & "-" & 
 Today.Month.ToString("0#") & "-" & Today.Day.ToString("0#") & ".csv.zip"
 Const host As String = "ftp://Datafeed.foreclosure.com"
 Const username As String = "sdlookup"
 Const pw As String = "ourpass"
 Dim strDownLoadTemplate = "sdlookup-total-" & Today.Year.ToString & "-" & Today.Month.ToString
 ("0#") & "-" & Today.Day.ToString("0#") & ".csv.zip"
 Dim strCleanFileForDTS As String
 Dim strLocalZipFile = "C:\ForeclosureFile\ForeclosureFull.zip"
 Dim strLocalCSVFile = "C:\ForeclosureFile\Foreclosurefull.csv"

 Sub Main()
    Dim URI As String = host + remoteFile
    Dim req As FtpWebRequest = CType(FtpWebRequest.Create(URI), FtpWebRequest)
    req.Credentials = New NetworkCredential(username, pw)

    req.KeepAlive = False
    req.UseBinary = True
    req.Method = System.Net.WebRequestMethods.Ftp.DownloadFile

    Using response As System.Net.FtpWebResponse = CType(req.GetResponse, 
    System.Net.FtpWebResponse)
        Using responseStream As IO.Stream = response.GetResponseStream
            Using fs As New IO.FileStream(localFile, IO.FileMode.Create)
                Dim buffer(2047) As Byte
                Dim read As Integer = 0
                Do
                    read = responseStream.Read(buffer, 0, buffer.Length)
                    fs.Write(buffer, 0, read)
                Loop Until read = 0
                responseStream.Close()
                fs.Flush()
                fs.Close()
            End Using
            responseStream.Close()
        End Using
        response.Close()
    End Using
    Dim zipPath As String = "C:\ForeclosureFile\"
    Dim extractPath As String = "C:\ForeclousreFile"

    ZipFile.ExtractToDirectory(zipPath, extractPath)

End Sub

Sub ProcessFile()

    'Downloaded file
    Dim oFile As System.IO.File
    Dim oRead As System.IO.StreamReader
    Dim strLocalCSVFile As String = "C:\ForeclosureFile\sdlookoup-total-" & 
    DateTime.Today.Year.ToString & "-" & DateTime.Today.Month.ToString("0#") & "-" & 
    DateTime.Today.Day.ToString("0#") & ".csv"
    Dim strCleanFileForDTS As String = "C:\ForeclosureFile\ForDTS\sdlookoup-total-" & 
    DateTime.Today.Year.ToString & "-" & DateTime.Today.Month.ToString("0#") & "-" & 
    DateTime.Today.Day.ToString("0#") & ".csv"
    Dim LineIn As String
    'Dim Fields() As String

    'New File
    Dim oNewFile As System.IO.File
    Dim oWrite As System.IO.StreamWriter

    oWrite = File.CreateText(localFile & strCleanFileForDTS)

    oRead = File.OpenText(localFile & strLocalCSVFile)

    '        strLocalCSVFile()

    While oRead.Peek <> -1
        'While oRead.
        LineIn = oRead.ReadLine()
        'Fixes file problem
        oWrite.WriteLine(Replace(LineIn, """", "", 1))
    End While

    oRead.Close()
    oWrite.Close()
End Sub

Sub FTPFileDownload(strtFetchFile As String, PathToSave As String)

    Dim myFtpWebRequest As FtpWebRequest
    Dim myFtpWebResponse As FtpWebResponse
    Dim myStreamWriter As StreamWriter
    Dim strFullPathandFile As String

    strFullPathandFile = PathToSave & strtFetchFile


    myFtpWebRequest = WebRequest.Create("ftp://Datafeed.foreclosure.com/datafeed/" & 
    strtFetchFile)

    myFtpWebRequest.Credentials = New NetworkCredential("sdlookup", "ohpaiH1b")

    myFtpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile
    myFtpWebRequest.UseBinary = True
    myFtpWebRequest.UsePassive = True


    myFtpWebResponse = myFtpWebRequest.GetResponse()

    PathToSave = "D:\test.zip"

    myStreamWriter = New StreamWriter(PathToSave)
    myStreamWriter.Write(New StreamReader(myFtpWebResponse.GetResponseStream()).ReadToEnd)

    myStreamWriter.Close()

    '  litResponse.Text = myFtpWebResponse.StatusDescription

    myFtpWebResponse.Close()


 End Sub

 Public Sub DownloadFiles(ByVal Wildcard As String)
    Wildcard = "sdlookup-total-*.csv.zip"
    Dim Files As String() = GetFiles(Wildcard)
    For Each file As String In Files
        DownloadFile(file)
    Next
 End Sub
End Module

我应该如何修改上面的模块,以便每次执行模块时都会下载包含sdlookup-total-“Today'sDate”.csv.zip的所有文件而不管时间戳?

0 个答案:

没有答案