2016-05-26 83 views
0

我有以下代碼(或其等價物):進程無法訪問文件附件

var provider = new System.Net.Http.MultipartFormDataStreamProvider([...]); 
try 
{ 
    if (provider.FileData.Count != 0) 
    { 
     foreach (System.Net.Http.MultipartFileData file in provider.FileData) 
     { 
      Trace.WriteLine(file.Headers.ContentDisposition.FileName); 
      Trace.WriteLine("Server file path: " + file.LocalFileName); 

      AddAttachment(file.LocalFileName, file.Headers.ContentDisposition.FileName.Replace("\"", "")); 

      if (attachmentPaths.Length != 0) 
      { 
       attachmentPaths += ";"; 
      } 
      attachmentPaths += file.Headers.ContentDisposition.Name.Replace("\"", ""); 
     } 
    } 
} 
catch (Exception ex) 
{ ... } 

... 
public void AddAttachment(string attachmentFileName, string attachmentName) 
{ 
    var AttachmentList = new List<System.Net.Mail.Attachment>(); 

    System.Net.Mail.Attachment newAttachment = new System.Net.Mail.Attachment(attachmentFileName); 
    newAttachment.Name = attachmentName; 
    AttachmentList.Add(newAttachment); 
} 

而且我收到「進程無法訪問該文件...因爲它是被另一個過程「錯誤。我只想知道我的應用程序可能在哪裏得到錯誤。我不知道它在哪裏實際上是試圖訪問該文件。我最好的猜測是在附件構造函數中,但我真的不確定。

+0

附註:我不知道如何觸發它。這是在夜間電子郵件過程中發生的,我在日誌中看到錯誤。除了修正它以更好地處理錯誤之外,我寧願不對該程序進行任何更改。也就是說,我認爲我不能調試它。 – BCarpe

+0

這是一個非常正常的事故。可能是因爲你的程序中有一個錯誤,並且你沒有關閉/處理這個文件。可能是因爲一些其他進程也打開了文件,就像異常說的那樣。可能是因爲反惡意軟件會在完成掃描文件之前阻止訪問。縮小範圍完全取決於你。產生一個響亮的警報,以便您可以快速檢查機器當然是必要的。 –

+0

感謝評論,漢斯。我瞭解該文件正在被別的東西使用。我不明白的是我試圖在上面的代碼中訪問它的地方。據我所知,它沒有進行任何讀取,寫入或刪除操作。 – BCarpe

回答

0

我能弄清楚在調試器中測試它的方法。答案是肯定的,System.Net.Mail.Attachment構造函數是試圖訪問文件的內容。