2010-05-06 97 views
0

我正在使用VC++項目,因爲我的應用程序從輸入路徑處理文件,並在目標路徑中生成3個輸出「* .DAT」文件。我會將這些DAT文件FTP到目標服務器。在FTP之後,我需要刪除兩個輸出.DAT文件的文件夾。我可以刪除這些文件,因爲在進程後面運行一個異步線程。由於線程正在運行,刪除它時會顯示「無法刪除,該文件被其他人使用」。VC++ - 異步線程

我需要停止該線程並刪除文件。也可以從輸入路徑中獲取多個文件進行處理。

請幫我解決這個問題。對我來說,它是非常重要的問題。請儘快幫助我。

回答

0

我不認爲這是一個線程問題。相反,我認爲你的問題是Windows不會讓你刪除一個仍然有引用它的打開句柄的文件。確保您在要處理的文件上首先呼叫CloseHandle。還要確保您用於執行FTP傳輸的任何機制都沒有任何對您要刪除的文件開放的句柄。

+0

嗨torak, 你說得對,我沒有刪除該文件之前關閉處理。我的問題已解決。謝謝。 – JVNR 2010-05-07 08:22:11

0

我不認爲強制後臺線程將解決您的問題。您無法刪除這些文件,因爲您正在爲這些文件保留一個打開的句柄。您必須先關閉手柄。創建一個事件對象並在主線程和後臺線程之間共享它。當後臺線程完成通過FTP發送文件時,它應該設置此事件。讓主線程在刪除文件之前等待事件。

後臺線程:

SendFiles(); 
ReleaseResources(); // (might be necessary, depending on your design) 
SetEvent(hFilesSentEvent); 

主線:

WaitForSingleObject(hFilesSentEvent); 
DeleteFiles(); 
+0

嗨,彼得, 謝謝。現在我已經關閉了處理程序,現在我的應用程序運行良好。 – JVNR 2010-05-07 08:23:42