我正在研究VC ++项目,因为我的应用程序处理来自输入路径的文件,并在目标路径中生成3个输出“* .DAT”文件。我将FTP这些DAT文件FTP到目标服务器。在FTP之后,我只需要删除两个输出.DAT文件的文件夹。我能够删除这些文件,因为在该进程后面有一个异步线程运行。由于线程正在运行,删除它时说“无法删除,该文件被其他人使用”。
我需要停止该线程并删除文件。也可以从输入路径中获取多个文件进行处理。
请帮我解决这个问题。对我来说这是一个非常重要的问题。请尽快帮助我。
答案 0 :(得分:0)
我不认为这是一个线程问题。相反,我认为您的问题是Windows不会让您删除仍然具有引用它的打开句柄的文件。确保首先在要删除的文件的句柄上调用CloseHandle
。还要确保您用于执行FTP传输的任何机制都没有对要删除的文件打开任何句柄。
答案 1 :(得分:0)
我认为强制后台线程不会解决您的问题。您无法删除这些文件,因为您持有这些文件的打开句柄。您必须先关闭手柄。创建一个事件对象并在主线程和后台线程之间共享它。当后台线程完成通过FTP发送文件时,它应该设置此事件。在删除文件之前让主线程等待事件。
后台主题:
SendFiles();
ReleaseResources(); // (might be necessary, depending on your design)
SetEvent( hFilesSentEvent );
主线程:
WaitForSingleObject( hFilesSentEvent );
DeleteFiles();