如何解决进程无法访问文件“filename”,因为在删除文件时它正被另一个进程使用
当我尝试删除一个文件时,它说我的服务器正在使用它,所以我尝试实现一个 using (Image img = Image.FromFile(imgFilePath))
,但是我收到了 parameter is not valid
错误消息。我还尝试将图像存储在一个变量中,然后调用 .Dispose()
但这也不起作用。
任何帮助将不胜感激!
删除代码(客户端):
private void pbDelete_Click(object sender,EventArgs e)
{
if (imgSliderCapture.Images.Count > 0)
{
int currentImageIndex = imgSliderCapture.CurrentImageIndex;
m_DispenseOrderPresenter.DeleteCapturedRxImage(currentImageIndex);
imgSliderCapture.Images.RemoveAt(currentImageIndex);
if (imgSliderCapture.Images.Count <= 0)
{
pbCamera.Image = global::KeyCentrix.RxKey.UI.Properties.Resources.white_camera;
pbCamera.BackColor = Color.DarkGray;
imgSliderCapture.ImageList = null;
pbCamera.Padding = new Padding(38,15,40,35);
pbCamera.Size = new Size(169,123);
pbDelete.Visible = false;
}
}
}
public void DeleteCapturedRxImage(int currentImageIndex)
{
if (File.Exists(m_PathImagePairs[currentImageIndex].Key))
{
File.Delete(m_PathImagePairs[currentImageIndex].Key);
}
}
我认为可能导致问题的服务器端代码:
public List<KeyValuePair<string,Image>> GetCapturedRxImages(string rxId)
{
try
{
string[] imgFilePaths = GetCapturedRxImagesFilePaths(rxId);
List<KeyValuePair<string,Image>> images = new List<KeyValuePair<string,Image>>();
List<byte[]> byteArrays = new List<byte[]>();
if (imgFilePaths == null || imgFilePaths.Length < 1)
{
return null;
}
foreach(string imgFilePath in imgFilePaths)
{
images.Add(new KeyValuePair<string,Image>(imgFilePath,Image.FromFile(imgFilePath)));
}
return images;
}
catch (Exception ex)
{
LogFactory.LogEvent(typeof(RxDirSvc),LogLevel.Error,String.Format("Exception in {0}",MethodInfo.GetCurrentMethod()),ex);
return null;
}
}
/// <summary>
/// Gets the user captured drug's image file name and path
/// </summary>
/// <param name="identifier"></param>
/// <returns></returns>
public string[] GetCapturedRxImagesFilePaths(string rxId)
{
try
{
List<string> filesFound = new List<string>();
string pathFolder = Directory.GetParent(System.Windows.Forms.Application.StartupPath) + @"\images\RxCapturedImages\" + rxId;
filesFound.AddRange(Directory.GetFiles(pathFolder,"*.jpeg"));
return filesFound.ToArray();
}
catch (Exception ex)
{
LogFactory.LogEvent(typeof(RxDirSvc),ex);
return null;
}
}
解决方法
你试过这种方法吗?您必须先从列表中删除图像,然后再将其删除。错误可能是因为图像仍然绑定到滑块。
imgSliderCapture.Images.RemoveAt(currentImageIndex);
m_DispenseOrderPresenter.DeleteCapturedRxImage(currentImageIndex);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。