【问题标题】:File is still in use after Multipart post多部分发布后文件仍在使用中
【发布时间】:2014-09-19 00:21:48
【问题描述】:

环境: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);

当我尝试删除文件时出现异常“文件正在使用中”。 我应该如何操作以释放文件然后将其删除?

【问题讨论】:

  • 您尝试过最新的 Indy 10.6 版本吗?也许现在已经修好了。
  • @mjn:感谢您的回答。我使用 Indy 和 gsIdVersion = '10.6.0.5146';现在会尝试更新。
  • @mjn:现在我有gsIdVersion = '10.6.1.5187'...情况也一样。
  • 感谢大家。我的问题是对单个文件的多线程访问和非常慢的 inet 连接。

标签: delphi http indy


【解决方案1】:

显示的代码没有错误。

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

此外,您还可以在 iirc 中以更短的方式创建没有所有者的 TIdHTTP 实例。而不是:

HTTP := TIdHTTP.Create(nil);

你可以放弃争论:

HTTP := TIdHTTP.Create;

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多