2014-01-22 196 views
0

我已經在VB中編寫了一個程序,其中一些電子郵件的附件以編程方式存儲在計算機中。不允許文件夾訪問

保存文件的過程是這樣的:

  1. 創建一個臨時文件夾並保存附件出現。 「C:\ tempFolder \ attachment.fletyp」

  2. 這個文件進行分析,然後保存到其相應​​的文件夾,比如 「C:\ AnotherFolder \ attachment.fletyp」

  3. 保存文件後,它將根據郵件的發送時間設置文件的lastWriteTime屬性。

  4. 「C:\ AnotherFolder」的lastwritetime也發生了變化。

  5. 刪除所有來自 「C:\ tempFolder」

有時,它工作正常。但有時候會出現錯誤,錯誤信息是:

進程無法訪問文件「C:\ AnotherFolder」,因爲它正在被另一個進程使用。

請注意,它是程序無法訪問的文件夾,而不是文件。

我的猜測是,它發生在第3步,當程序仍在寫入文件的最後寫入時間並且還沒有在第4步發生時「釋放」時。

我在複製錯誤時遇到了麻煩,因爲它「恰好發生」。

我的問題是我怎麼知道文件夾本身是否仍然在一個進程下,等待它完成,然後再寫入它?

編輯

我已經測試了這個代碼產生相同的錯誤收窄的問題。我不知道情況是否如此,但我認爲有90%的可能性。

For i As Integer = 0 To 500 
    Try 
     Directory.SetLastWriteTime("C:\anotherFolder", Date.Now) 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
    Console.WriteLine(i) 
Next 

就我而言,電子郵件有6個附件。 (我只是把它做到了500,所以很容易發生異常)。每次保存附件時,它都會將lastWriteTime寫入其父文件夾。如果異常沒有發生,請嘗試再次運行代碼。

我該如何處理?

回答

0

嘗試這樣

Dim path As String = "C:\anotherFolder" 

Directory.SetLastWriteTime(path, DateTime.Now) 
+0

感謝您的答覆先生..但仍然是相同的輸出:( – Codemunkeee

+0

http://msdn.microsoft。COM/EN-US /庫/ system.io.directory.setlastwritetime(V = vs.110)的.aspx?CS-保存琅= 1&CS-LANG = VB#代碼片段 - 1 –

相關問題