您可以使用以下函數來加載圖像而不鎖定它加載位圖後,您可以刪除它沒有任何問題
用法:
_pic_image.Image = OpenImageWithoutLockingIt("h:\myimage.png")
功能:
Private Function OpenImageWithoutLockingIt(imagePath As String) As Bitmap
If IO.File.Exists(imagePath) = False Then Return Nothing
Using imfTemp As Image = Image.FromFile(imagePath)
Dim MemImage As Bitmap = New Bitmap(imfTemp.Width, imfTemp.Height)
Using g As Graphics = Graphics.FromImage(MemImage)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
g.Clear(Color.Transparent)
g.DrawImage(imfTemp, 0, 0, MemImage.Width, MemImage.Height)
Return MemImage
End Using
End Using
End Function
您也可以刪除通過以下功能只讀文件:
Private Function DeleteImageFile(filePath As String, DeleteAlsoReadonlyFile As Boolean) As Boolean
Try
If IO.File.Exists(filePath) = False Then Return True
If DeleteAlsoReadonlyFile Then
Dim fileInf As New FileInfo(filePath)
If fileInf.IsReadOnly Then
'remove readonly attribute, otherwise File.Delete throws access violation exception.
fileInf.IsReadOnly = False
End If
End If
IO.File.Delete(filePath)
Return True
Catch ex As Exception
Return False
End Try
End Function
C#代碼:
private Bitmap OpenImageWithoutLockingIt(string imagePath)
{
if (System.IO.File.Exists(imagePath) == false)
return null;
using (Image imfTemp = Image.FromFile(imagePath))
{
Bitmap MemImage = new Bitmap(imfTemp.Width, imfTemp.Height);
using (Graphics g = Graphics.FromImage(MemImage))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.Clear(Color.Transparent);
g.DrawImage(imfTemp, 0, 0, MemImage.Width, MemImage.Height);
return MemImage;
}
}
}
private bool DeleteImageFile(string filePath, bool DeleteAlsoReadonlyFile)
{
try
{
if (System.IO.File.Exists(filePath) == false)
return true;
if (DeleteAlsoReadonlyFile)
{
FileInfo fileInf = new FileInfo(filePath);
if (fileInf.IsReadOnly)
{
//remove readonly attribute, otherwise File.Delete throws access violation exception.
fileInf.IsReadOnly = false;
}
}
System.IO.File.Delete(filePath);
return true;
}
catch (Exception ex)
{
return false;
}
}
看起來像文件被使用,你可以檢查之前刪除:http://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in -use – Milen
我檢查。它說它進程無法訪問文件'... \ bin \ Debug \ dataBase \ img \ 6.jpg',因爲它正在被另一個進程使用。在catch塊中,如何解決它? – user3374618