我正在寫的一個工具負責在數小時內下載數千個圖像文件。最初,使用TIdHTTP
,我將Get
文件轉換爲TMemoryStream
,然後將其保存到文件中,只要沒有例外。爲了提高速度,我將TMemoryStream
更改爲TFileStream
。通過文件流取消保存文件的適當方法?
但是,現在,如果找不到資源,或者其他任何導致沒有實際文件的異常,它仍保存一個空文件。
完全可以理解的,因爲我只是簡單地在下載之前創建一個文件流...
FileStream:= TFileStream.Create(FileName, fmCreate);
try
Web.Get(AURL, FileStream);
finally
FileStream.Free;
end;
我知道我可以簡單刪除該文件,如果有異常。但它似乎太sl。。我相信有一種更恰當的方法來中止這種情況。
如何在不改變性能(如果可能的話)的情況下保存文件的情況下保存文件?
你可以在'TFileStream'上編寫你自己的包裝,它會延遲創建一個文件,直到有一些數據寫入它爲止。 – EugeneK
我會創建我自己的文件流類,它將調用具有FILE_SHARE_DELETE共享模式的'CreateFile',並且當發生Indy異常時,我會調用標記文件以進行刪除的'DeleteFile'函數(例如,從該類的方法)並在關閉文件的最後一個句柄時(即釋放流時)將其刪除。 – Victoria
我將創建一個帶有布爾成員的'TFileStream'後代,並且只有在下載成功時才設置該成員,然後在未設置布爾值的情況下讓析構函數刪除文件。 –