2013-10-16 37 views
0

我打算開發一個文件組織軟件,用於檢測到達特殊文件夾的文件並將這些文件複製到特定文件夾(例如.txt文件轉到文本文件夾)。我正在使用FileSystemWatcher獲取文件或文件夾複製完成狀態

用於檢測文件。所以我想知道是否通過C#代碼完成文件或文件夾複製操作(手動複製文件或文件夾)。

單文件程序沒問題。但對於多個文件需要改進程序。

我用這個循環來檢查文件是否被釋放,但是對於大文件,這使得程序沒有響應。

void File_move(string source,string destination) 
     { 
      EE: 
       try 
       { 
        File.Move(source, destination); 
       } 
       catch (Exception ex) 
       { 
        lblStatus.Text = "Waiting for file copping complete"; 
        Application.DoEvents(); 
        goto EE; 
       } 

     } 
+1

您無法獲取操作的當前運行狀態。但是FileSystemWatcher應該在創建文件時引發「創建」事件或其他事情 - 問題在於,我認爲它是在複製剛剛開始並正在運行時創建的。你是這個意思嗎? –

+0

你是對的。它剛剛開始複製時創建...我google了很多。我不認爲會有答案。感謝您的回覆 –

+0

您可以繼續收聽FileSizeChanged事件或類似的事情(或上次訪問日期,即使我也認爲它在複製開始時設置一次)。但是,您需要了解何時停止複製(也許在沒有FileSizeChanged事件的一段時間之後)。 –

回答

0

經過很長時間我找到了一個解決方案,我自己的問題。下面是使用C#的鏈接,獲取文件複製進度和vb.net

http://pinvoke.net/default.aspx/kernel32/CopyFileEx.html

在此示例代碼中我們可以得到在逃避一個文件的進度

private CopyProgressResult CopyProgressHandler(long total, long transferred, long streamSize, long StreamByteTrans, uint dwStreamNumber,CopyProgressCallbackReason reason, IntPtr hSourceFile, IntPtr hDestinationFile, IntPtr lpData) 
    { 
     Progressbar.Max=Convert.ToInt32(total); 
     Progressbar.Value=Convert.ToInt32(transferred); 
     Application.Doevents(); 
     return CopyProgressResult.PROGRESS_CONTINUE; 
    } 

長的總給總大小和長轉移給出當前進度