2011-11-28 38 views
3

我需要掃描最新文件的特定文件夾(基本上檢查修改日期以查看哪個是最新的),但請記住文件具有隨機名稱。這是我到目前爲止:通過「修改日期」確定文件夾中的哪個文件是最新的?

procedure TForm1.Button1Click(Sender: TObject); 
begin 

ftp.Host := 'domain'; 
ftp.Username := 'username'; 
ftp.password := 'password'; 
ftp.Connect; 
ftp.Put('random-filename.ext'); //This is where it should grab only the latest file 
ftp.Quit; 
ftp.Disconnect; 

end; 

這可能嗎?

謝謝!

+0

使用FTP,您需要使用LIST命令並搜索列表中的最新文件。請小心,因爲LIST結果格式不符合標準並取決於FTP服務器。 – philnext

+2

@philnext他試圖將某些東西放到ftp中,而不是獲得 – Grrbrr404

+1

@ Grrbrr404!你是對的。來自我的錯誤。 – philnext

回答

5

假設OP要掃描特定的本地文件夾,找到最近修改的文件,這裏有一個很簡單的功能來做到這一點:

function GetLastModifiedFileName(AFolder: String; APattern: String = '*.*'): String; 
var 
    sr: TSearchRec; 
    aTime: Integer; 
begin 
    Result := ''; 
    aTime := 0; 
    if FindFirst(IncludeTrailingPathDelimiter(AFolder) + APattern, faAnyFile, sr) = 0 then 
    begin 
    repeat 
     if sr.Time > aTime then 
     begin 
     aTime := sr.Time; 
     Result := sr.Name; 
     end; 
    until FindNext(sr) <> 0; 
    FindClose(sr); 
    end; 
end; 

AFolder應該是您要掃描的文件夾的絕對或相對路徑,APattern是可選的,並且應該包含標準的DOS模式,該模式指定應檢查哪些文件。如果第二個參數沒有指定,則假定*。*(所有文件)。結果將是具有最近修改日期的文件名。

+0

這個功能可以工作。不過,我需要指定一個擴展名,否則返回一個點作爲結果。儘管如此,謝謝你。 –

+0

用第二個參數指定擴展名,如'\ *。ext'。這將告訴此功能只掃描擴展名爲.ext的文件。 – LightBulb

2

,因爲我認爲你正試圖把最新的文件從本地計算機到FTP服務器,您可以使用shell API函數:的SHGetFileInfo

首先從您的源文件夾中的所有文件,然後讓我們的FileInfo爲每個文件保留文件名與最新的修改日期在臨時。變種。

請瀏覽此網站,例如:http://www.scip.be/index.php?Page=ArticlesDelphi06&Lang=EN

+0

這與在FTP服務器上加載文件有什麼關係? 「獲取文件信息,然後自定義排序」方法通常起作用。 – jpfollenius

+1

@Smasher我只是指他在他的問題中發佈的代碼 - 他試圖將最新的文件上傳到ftp服務器 - 當然我的解決方案總是有效的 – Grrbrr404

+1

好吧,我剛剛發現你的推理令人生氣:「**因爲* *你想上傳到FTP,你可以使用'ShGetFileInfo'「... – jpfollenius

相關問題