文件仍在使用错误 32 如何释放它?

标签 file delphi delphi-2009 file-in-use

我正在通过以下代码上传文件。

成功上传后,我尝试删除该文件,但收到 32 - 文件正在使用错误。

谁能告诉我如何解决此文件使用错误?以下代码正在上传文件,但完成后不会释放它..

var
  HTTP: TidHTTP;
  SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
  PostData: TIdMultiPartFormDataStream;
  ResponseStream: TStringStream;
  Delete : Boolean;

begin
  ResponseStream := TStringStream.Create('');
  HTTP := TidHTTP.Create(nil);
  SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

  try
    SSLIOHandler.SSLOptions.Method := sslvSSLv3;
    HTTP.ReadTimeout := 30000; //30 seconds
    HTTP.ConnectTimeout := 30000; //30 seconds
    HTTP.IOHandler := SSLIOHandler;
    HTTP.HTTPOptions := [hoKeepOrigProtocol];
    HTTP.ProtocolVersion := pv1_1;
    PostData := TIdMultiPartFormDataStream.Create;

    PostData.AddFormField('username', 'demo');
    PostData.AddFormField('password', 'demo');
    PostData.AddFormField('action', 'upload');
    PostData.AddFormField('accountno', 'demo');

  PostData.AddFile('uploadedfile', FileName, GetMIMETypeFromFile(FileName));

  HTTP.Request.ContentType := PostData.RequestContentType;
  HTTP.Post('http://uploadsite.com/ex/exampleAPI.asmx/Process', PostData, ResponseStream);

  if AnsiContainsStr(ResponseStream.DataString, 'Done') then
    Delete := True;

finally
  SSLIOHandler.Free;
  HTTP.Free;
  ResponseStream.Free;
end;

if Delete then
  if DeleteFile(BFlashFileName) then
    ShowMessage('Deleted')
  else ShowMessage(BFlashFileName+' not deleted, error = '+
               IntToStr(GetLastError));

最佳答案

在尝试删除文件之前,调用 TIdMultiPartFormDataStream 实例的 Clear 方法。如果您不再需要它,释放它也将达到相同的效果(即 PostData.Free)。目前,您似乎正在泄漏 PostData 变量。

TIdMultiPartFormDataStream 清除其Fields 集合时,由AddFile 方法创建的文件流将被销毁并关闭文件句柄。

关于文件仍在使用错误 32 如何释放它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10956900/

相关文章:

delphi - 关闭辅助 Delphi 窗体会导致主窗体失去焦点

excel - Delphi:如何将时间字符串写入Excel单元格但保留通用数字格式

delphi - 在 Delphi XE2 上使用运行时包进行构建

wcf - Delphi 无法正确序列化 WCF 服务集合(整数、字符串、对象等的列表/数组)

arrays - Python 3.73 插入字节数组 = "object cannot be re-sized"

java - 如何创建一个文件并在其上写入 URL

delphi - 为什么在 FormCreate 中会失败,但在 FormShow 中却工作正常?

delphi - Delphi 2009之前如何处理UTF-8和ANSI转换?

c++ - 从 C++ 中的 .obj 文件中读取整数

C# 获取当前目录的真实路径