gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:41:04 25 4
gpt4 key购买 nike

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

上传成功后,我尝试删除文件,但收到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com