2014-01-22 59 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 –

相关问题