Multipart帖子后文件仍在使用中

时间:2014-09-18 11:49:57

标签: delphi http indy

环境:Delphi 2010,Indy10

我知道我并不孤单... 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);

当我尝试删除文件时,我有异常“文件正在使用中”。 我该如何处理以获取文件然后将其删除?

1 个答案:

答案 0 :(得分:0)

显示的代码没有错误。

可以看到一些潜在的内存泄漏,可以通过正确使用try .. finally来轻松修复。

另外,你可以用更短的方式创建一个没有所有者的TIdHTTP实例。而不是:

HTTP := TIdHTTP.Create(nil);

你可以放弃这个论点:

HTTP := TIdHTTP.Create;