2013-08-26 45 views
2

已經在這個錯誤中掙扎了很長時間。下面是代碼的問題該進程無法訪問文件,因爲其他進程正在使用該文件。

 for (Int32 Counter = 0; Counter < x.Rows.Count; Counter++) 
     { 
      using (FileStream bitmapFile = new FileStream(@"c:/someOlddir/file1.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
      { 
       using (Bitmap uploadedbitmap = new Bitmap(bitmapFile)) 
       { 
        using (System.Drawing.Image uploadedbitmapResized = ExtensionHelpers.Resize(uploadedbitmap, 800, 600, RotateFlipType.RotateNoneFlipNone)) 
        { 
         uploadedbitmapResized.Save(@"c:/someNewdir/file1.txt",System.Drawing.Imaging.ImageFormat.Jpeg); 
        } 
       } 
      } 
      /*errror occurss on this line */ 
      File.SetCreationTime(@"c:/someNewdir/file1.txt",someDateTimeVariable); 

     } 

我這段代碼遇到的問題是,它工作得很好的集合中的第30或40張圖片,但是當我到了50或60,我得到一個錯誤說我試圖設置日期時間的文件正被另一個進程使用。但是這個錯誤只發生在我迭代一個大集合並在迭代中的第40或第50個位置時,這怎麼可能是前30個圖像工作得很好,然後突然一個文件現在被進程鎖定了。我有使用語句的一切,但這個錯誤仍然存​​在。

我是否需要等到文件保存前才能訪問它,但這不應該是這樣,因爲我先保存文件然後嘗試訪問它。代碼有什麼問題?

+1

我懷疑這不是你的代碼打開文件。這可能是一些其他程序,只是看到你的新文件,並想看看它。反病毒軟件喜歡這樣做。 –

+0

嘗試修改[磁盤寫入緩存](http://support.microsoft.com/kb/259716),然後查看問題是否仍然存在。 –

回答

1

我現在找不到這個,但是我記得從我之前的一個項目中,在這種情況下使用using不起作用。

因此,放棄所有使用並手動管理文件關閉。

+0

按照您的建議進行了......保存後,我刪除了「uploadedbitmapResized」上的使用語句,並明確稱爲「uploadedbitmapResized.Dispose()」,這就實現了。但不是使用聲明應該照顧的呢? anywheres thx :) –

相關問題