2014-09-18 3 views
0

Окружающая среда: Delphi 2010, Indy10файла все еще используется после Multipart отправлять

Я знаю, что я не один с проблемой ... File is Still in Use Error 32 How can I free it?

Но через несколько дней борьбы я сдаюсь.

Мой код

var 
    multi: TIdMultipartFormDataStream; 
    ss: TStringStream; 
    FHTTP: TIdHTTP; 

FHTTP := TidHTTP.Create(nil); 
Multi:=TidMultiPartFormDataStream.Create; 
Multi.AddFormField('eventid', TSettingsManager.GetAppSettings('EventID')); 
Multi.AddFormField('password', TSettingsManager.GetAppSettings('EventPassword')); 
Multi.AddFile('file', filename, 'image/jpeg'); //GetMIMETypeFromFile(fileName)); 
try 
    FHTTP.Post(TSettingsManager.GetAppSettings('WEBServer') + '/upload', Multi, ss); 
finally 
    Multi.Clear; 
    FreeAndNil(Multi); 
    FreeAndNil(FHTTP); 
end; 

IOUtils.TFile.Delete(filename); 

У меня есть исключение «Файл используется» при попытке удалить файл. Как я должен действовать, чтобы получить бесплатный файл, а затем удалить его?

+0

Пробовали ли вы с последним Инди 10.6 версии? Возможно, теперь это исправлено. – mjn

+0

@mjn: спасибо за ответ. Я использую Indy с gsIdVersion = '10 .6.0.5146 '; Попробуем обновить сейчас. – mad

+0

@mjn: Теперь у меня есть gsIdVersion = '10 .6.1.5187 '... Ситуация та же. – mad

ответ

0

В коде не было ошибок.

Возможны некоторые потенциальные утечки памяти, которые могут быть легко устранены при правильном использовании try .. наконец.

Также iirc вы можете создать экземпляр TIdHTTP без владельца короче. Вместо того, чтобы:

HTTP := TIdHTTP.Create(nil); 

вы можете просто оставьте аргумент:

HTTP := TIdHTTP.Create; 
Смежные вопросы